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);
        }
Exemplo n.º 2
0
        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);
            }
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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));