public void ExternalLogins_ExternalUser() { var user = new ApplicationUser { UserName = "******" }; var provider = "someProvider"; var providerKey = "someProviderKey"; var providerDisplayName = "Some Provider Display Name"; var userLoginInfo = new Microsoft.AspNetCore.Identity.UserLoginInfo(provider, providerKey, providerDisplayName); _applicationUserStore.AddLoginAsync(user, userLoginInfo, CancellationToken.None).GetAwaiter().GetResult(); _ = _applicationUserStore.UpdateAsync(user).GetAwaiter().GetResult(); var loginsReturned = _applicationUserStore.GetLoginsAsync(user, CancellationToken.None).GetAwaiter().GetResult(); Assert.AreEqual(1, loginsReturned.Count); Assert.AreEqual(provider, loginsReturned[0].LoginProvider); Assert.AreEqual(providerKey, loginsReturned[0].ProviderKey); Assert.AreEqual(providerDisplayName, loginsReturned[0].ProviderDisplayName); _applicationUserStore.RemoveLoginAsync(user, provider, providerKey, CancellationToken.None).GetAwaiter().GetResult(); _ = _applicationUserStore.UpdateAsync(user).GetAwaiter().GetResult(); var userReturned = _applicationUserStore.FindById(user.UserId).GetAwaiter().GetResult(); var loginsReturnedAfterRemove = _applicationUserStore.GetLoginsAsync(userReturned, CancellationToken.None).GetAwaiter().GetResult(); Assert.IsEmpty(loginsReturnedAfterRemove); }
public virtual async Task ExternalUserRegister(ExternalUserRegisterDto externalUserRegisterDto) { var manager = Manager as UserManager; using (CurrentUnitOfWork.SetTenantId(externalUserRegisterDto.TenantId)) { var userLoginInfo = new Microsoft.AspNetCore.Identity.UserLoginInfo(externalUserRegisterDto.LoginProvider, externalUserRegisterDto.ProviderKey, ""); //判断此第三方账号是否已绑定过 var user = await manager.FindAsync(userLoginInfo); if (user != null) { throw new UserFriendlyException(L("此登录信息已绑定过系统账号")); } //判断对应手机号是否已存在 if (await manager.GetAll().CountAsync(o => o.PhoneNumber == externalUserRegisterDto.Mobile) > 0) { throw new UserFriendlyException(L("此手机号已被注册")); } user = new User() { UserName = externalUserRegisterDto.Mobile, PhoneNumber = externalUserRegisterDto.Mobile, Name = externalUserRegisterDto.Name, Sex = externalUserRegisterDto.Sex, TenantId = externalUserRegisterDto.TenantId, OrganizationId = externalUserRegisterDto.OrganizationId, IsActive = false, }; user.ToBeVerified = true;//设置用户未审核 //插入员工信息 await manager.InsertAsync(user); await CurrentUnitOfWork.SaveChangesAsync(); //设置角色 await manager.SetRoles(user, externalUserRegisterDto.RoleIds); //设置密码 await manager.SetPassword(user, externalUserRegisterDto.Password); //绑定第三方登录信息 await manager.BindExternalLogin(user, userLoginInfo); } }
public override async Task AddLoginAsync( TUser user, Microsoft.AspNetCore.Identity.UserLoginInfo login, CancellationToken cancellationToken = default) { cancellationToken.ThrowIfCancellationRequested(); ThrowIfDisposed(); if (user == null) { throw new ArgumentNullException(nameof(user)); } if (login == null) { throw new ArgumentNullException(nameof(login)); } await _session.SaveAsync( CreateUserLogin(user, login), cancellationToken ); await FlushChangesAsync(cancellationToken); }
public async Task _02_CanDoCurd() { var user = new IdentityUser { UserName = "******", NormalizedUserName = "******", Email = "*****@*****.**", PhoneNumber = "02000000000", PhoneNumberConfirmed = true, LockoutEnabled = false, LockoutEnd = null, AccessFailedCount = 0, NormalizedEmail = "*****@*****.**", PasswordHash = null, SecurityStamp = null }; var result = await store.CreateAsync(user); Assert.True(result.Succeeded); var id = user.Id; Assert.IsNotEmpty(id); Assert.IsNotEmpty(user.ConcurrencyStamp); user.LockoutEnabled = true; user.LockoutEnd = DateTimeOffset.UtcNow.AddMinutes(20); result = await store.UpdateAsync(user); Assert.True(result.Succeeded); var lockouts = await store.Users .Where(u => u.LockoutEnabled) .CountAsync(); Assert.True(lockouts > 0); user = await store.FindByEmailAsync(user.NormalizedEmail); Assert.True(user.Id == id); user = await store.FindByNameAsync(user.NormalizedUserName); Assert.True(user.Id == id); user = await store.FindByIdAsync(id); Assert.True(user.Id == id); var claim = new Claim("Test", Guid.NewGuid().ToString("N")); await store.AddClaimsAsync(user, new [] { claim }); var claims = await store.GetClaimsAsync(user); Assert.True(claims.Count > 0); var users = await store.GetUsersForClaimAsync(claim); Assert.IsNotEmpty(users); await store.RemoveClaimsAsync(user, claims); var loginInfo = new Microsoft.AspNetCore.Identity.UserLoginInfo( "test", Guid.NewGuid().ToString("N"), "Test" ); await store.AddLoginAsync(user, loginInfo); await store.SetTokenAsync( user, loginInfo.LoginProvider, loginInfo.ProviderDisplayName, loginInfo.ProviderKey, CancellationToken.None ); await store.RemoveTokenAsync( user, loginInfo.LoginProvider, loginInfo.ProviderDisplayName, CancellationToken.None ); await store.RemoveLoginAsync( user, loginInfo.LoginProvider, loginInfo.ProviderKey ); result = await store.DeleteAsync(user); Assert.True(result.Succeeded); }
protected virtual TUserLogin CreateUserLogin(TUser user, Microsoft.AspNetCore.Identity.UserLoginInfo login) { throw null; }
public abstract System.Threading.Tasks.Task AddLoginAsync(TUser user, Microsoft.AspNetCore.Identity.UserLoginInfo login, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken));