예제 #1
0
        public async Task <LoginOutput> LoginAsync([FromServices] IHttpContextAccessor httpContextAccessor, [Required] LoginInput input)
        {
            // 获取加密后的密码
            var encryptPassword = MD5Encryption.Encrypt(input.Password.Trim());

            // 判断用户名或密码是否正确
            var user = await _userRepository.FirstOrDefaultAsync(u => u.Account.Equals(input.Account) && u.Password.Equals(encryptPassword));

            _ = user ?? throw Oops.Oh(SystemErrorCodes.u1000);

            // 更新登录时间
            user.SigninedTime = DateTimeOffset.Now;

            // 映射结果
            var output = user.Adapt <LoginOutput>();

            // 生成 token
            var accessToken = output.AccessToken = JWTEncryption.Encrypt(new Dictionary <string, object>
            {
                { "UserId", user.Id },
                { "Account", user.Account }
            });

            // 生成 刷新token
            var refreshToken = JWTEncryption.GenerateRefreshToken(accessToken);

            // 设置 Swagger 自动登录
            httpContextAccessor.SigninToSwagger(accessToken);

            // 设置刷新 token
            httpContextAccessor.HttpContext.Response.Headers["x-access-token"] = refreshToken;

            return(output);
        }
예제 #2
0
        public async Task <(string, string)> LoginAsync(AdminUserLoginCommand command)
        {
            var user = await bus.SendCommand(command);

            // 生成 token
            var accessToken = JWTEncryption.Encrypt(new Dictionary <string, object>
            {
                { userId, user.Id },
                { userName, user.UserName }
            });

            // 生成 刷新token
            var refreshToken = JWTEncryption.GenerateRefreshToken(accessToken);

            return(accessToken, refreshToken);
        }
예제 #3
0
        public async Task <(string, string)> LoginAsync(AdminUserLoginCommand command, CancellationToken cancellationToken = default)
        {
            var user = await adminUserService.LoginAsync(command, cancellationToken);

            // 生成 token
            var accessToken = JWTEncryption.Encrypt(new Dictionary <string, object>
            {
                { userId, user.Id },
                { userName, user.UserName }
            });

            // 生成 刷新token
            var refreshToken = JWTEncryption.GenerateRefreshToken(accessToken);

            // 设置 Swagger 自动登录
            Web.HttpContext.SigninToSwagger(accessToken);
            // 设置刷新 token
            Web.HttpContext.Response.Headers["x-access-token"] = refreshToken;

            return(accessToken, refreshToken);
        }
예제 #4
0
        public async Task <(string, string)> LoginAsync(AdminUserLoginCommand request, CancellationToken cancellationToken = default)
        {
            var user = default(AdminUserEntity);

            request.Password = Encrypt.Md5By32(request.Password);

            var loginWay = "";

            if (!Valid.IsMobileNumberSimple(request.Account))
            {
                user = await db.Context.AdminUser.Where(c => c.UserName.Equals(request.Account)).FirstOrDefaultAsync(cancellationToken);

                if (user == null)
                {
                    Failure.Error("账号不存在");
                }

                loginWay = "Mobile";
            }
            else
            {
                user = await db.Context.AdminUser.Where(c => c.Mobile.Equals(request.Account)).FirstOrDefaultAsync(cancellationToken);

                if (user == null)
                {
                    Failure.Error("手机号码不存在");
                }

                loginWay = "UserName";
            }

            if (!user.Password.Equals(request.Password))
            {
                Failure.Error("密码错误");
            }
            if (user.Status != Status.Show)
            {
                Failure.Error("您的帐号禁止登录,请与管理员联系!");
            }


            user.LoginCount   += 1;
            user.LoginLastTime = DateTime.Now;
            user.LoginLastIp   = Web.IP;

            user.LoginRecords.Add(new LoginRecordEntity
            {
                AdminId   = user.Id,
                LoginIp   = user.LoginLastIp,
                LoginTime = user.LoginLastTime,
                LoginWay  = loginWay
            });

            db.Update(user);

            // 生成 token
            var accessToken = JWTEncryption.Encrypt(new Dictionary <string, object>
            {
                { userId, user.Id },
                { userName, user.UserName }
            });

            // 生成 刷新token
            var refreshToken = JWTEncryption.GenerateRefreshToken(accessToken);

            // 设置 Swagger 自动登录
            Web.HttpContext.SigninToSwagger(accessToken);
            // 设置刷新 token
            Web.HttpContext.Response.Headers["x-access-token"] = refreshToken;

            return(accessToken, refreshToken);
        }