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); }
public LoginOutput Login(LoginInput input) { // 验证用户名和密码 var user = _userRepository.FirstOrDefault(u => u.Account.Equals(input.Account) && u.Password.Equals(input.Password), false) ?? throw Oops.Oh(1000); var output = user.Adapt <LoginOutput>(); // 生成 token var jwtSettings = App.GetOptions <JWTSettingsOptions>(); var datetimeOffset = DateTimeOffset.UtcNow; output.AccessToken = JWTEncryption.Encrypt(jwtSettings.IssuerSigningKey, new Dictionary <string, object>() { { "UserId", user.Id }, // 存储Id { "Account", user.Account }, // 存储用户名 { JwtRegisteredClaimNames.Iat, datetimeOffset.ToUnixTimeSeconds() }, { JwtRegisteredClaimNames.Nbf, datetimeOffset.ToUnixTimeSeconds() }, { JwtRegisteredClaimNames.Exp, DateTimeOffset.UtcNow.AddSeconds(jwtSettings.ExpiredTime.Value * 60).ToUnixTimeSeconds() }, { JwtRegisteredClaimNames.Iss, jwtSettings.ValidIssuer }, { JwtRegisteredClaimNames.Aud, jwtSettings.ValidAudience } }); // 设置 Swagger 刷新自动授权 _httpContextAccessor.SigninToSwagger(output.AccessToken); return(output); }
public async Task <StatusResult <string> > UserLogin(LoginInputDto dto) { var result = await _accountService.LoginAsync(dto); #region 添加登录日志 #endregion if (!result.IsSuccess) { return(new StatusResult <string>(result.Message)); } // 生成 token var accessToken = JWTEncryption.Encrypt(new Dictionary <string, object>() { { ClaimConst.USERID, result.Data.Id }, // 存储Id { ClaimConst.USERNAME, result.Data.UserName }, // 存储用户名 { ClaimConst.USERNICKNAME, result.Data.NickName }, { ClaimConst.QINGSHANUSERISSUPER, result.Data.IsSuper }, }); return(new StatusResult <string>() { Data = "Bearer " + accessToken }); }
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); }
public LoginOutput Login(LoginInput input) { // 验证用户名和密码 var user = _userRepository.FirstOrDefault(u => u.Account.Equals(input.Account) && u.Password.Equals(input.Password), false) ?? throw Oops.Oh(1000); var output = user.Adapt <LoginOutput>(); output.AccessToken = JWTEncryption.Encrypt(new Dictionary <string, object>() { { "UserId", user.Id }, // 存储Id { "Account", user.Account }, // 存储用户名 }); // 设置 Swagger 刷新自动授权 _httpContextAccessor.SigninToSwagger(output.AccessToken); return(output); }
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); }
public string GetToken() { var jwtSettings = App.GetOptions <JWTSettingsOptions>(); var datetimeOffset = new DateTimeOffset(DateTime.Now); var token = JWTEncryption.Encrypt(jwtSettings.IssuerSigningKey, new JObject() { { JwtRegisteredClaimNames.UniqueName, 1 }, { JwtRegisteredClaimNames.NameId, "百小僧" }, { JwtRegisteredClaimNames.Iat, datetimeOffset.ToUnixTimeSeconds() }, { JwtRegisteredClaimNames.Nbf, datetimeOffset.ToUnixTimeSeconds() }, { JwtRegisteredClaimNames.Exp, new DateTimeOffset(DateTime.Now.AddSeconds(jwtSettings.ExpiredTime.Value * 60)).ToUnixTimeSeconds() }, { JwtRegisteredClaimNames.Iss, jwtSettings.ValidIssuer }, { JwtRegisteredClaimNames.Aud, jwtSettings.ValidAudience } }); // 设置 Swagger 刷新自动授权 _httpContextAccessor.HttpContext.Response.Headers["access-token"] = token; return(token); }
public LoginResponseDto Login([FromServices] IHttpContextAccessor httpContextAccessor, [FromBody] LoginRequestDto dto) { var user = _sysUserSerivce.Login(dto.Account, dto.Password); if (user == null) { throw Oops.Oh("用户名或者密码错误"); } var response = user.Adapt <LoginResponseDto>(); // 生成 token response.AccessToken = JWTEncryption.Encrypt(new Dictionary <string, object> { { "UserId", user.UserId }, { "UserName", user.UserName }, { "Account", user.UserName } }); response.ExipreTime = DateTimeOffset.Now.AddMinutes(20).DateTime; // 设置 Swagger 自动登录 httpContextAccessor.SigninToSwagger(response.AccessToken); return(response); }
public async Task <LoginAdminOutput> PostLogin(LoginAdminInput loginAdminInput) { var admin = await _manageService.LoginAdmin(loginAdminInput.Adapt <AdminDto>()); var output = admin.Adapt <LoginAdminOutput>(); // 生成 token var jwtSettings = App.GetOptions <JWTSettingsOptions>(); var datetimeOffset = new DateTimeOffset(DateTime.Now); if (jwtSettings.ExpiredTime != null) { output.AccessToken = JWTEncryption.Encrypt(jwtSettings.IssuerSigningKey, new Dictionary <string, object>() { { "UserId", admin.Id }, // 存储Id { "IsAdmin", true }, // 管理员登录 { JwtRegisteredClaimNames.Iat, datetimeOffset.ToUnixTimeSeconds() }, { JwtRegisteredClaimNames.Nbf, datetimeOffset.ToUnixTimeSeconds() }, { JwtRegisteredClaimNames.Exp, new DateTimeOffset( DateTime.Now.AddSeconds( jwtSettings.ExpiredTime.Value * 60 * 60 * 24 * 30)) .ToUnixTimeSeconds() }, { JwtRegisteredClaimNames.Iss, jwtSettings.ValidIssuer }, { JwtRegisteredClaimNames.Aud, jwtSettings.ValidAudience } }); } // 设置 Swagger 刷新自动授权 if (_httpContextAccessor.HttpContext != null) { _httpContextAccessor.HttpContext.Response.Headers["access-token"] = output.AccessToken; } return(output); }
public async Task <LoginOutput> PostLogin(LoginInput loginInput) { var student = await _studentService.LoginStudent(loginInput.StudentNo, loginInput.Password); var output = student.Adapt <LoginOutput>(); // 生成 token var jwtSettings = App.GetOptions <JWTSettingsOptions>(); var datetimeOffset = new DateTimeOffset(DateTime.Now); output.AccessToken = JWTEncryption.Encrypt(jwtSettings.IssuerSigningKey, new Dictionary <string, object>() { { "UserId", student.Id }, // 存储Id { JwtRegisteredClaimNames.Iat, datetimeOffset.ToUnixTimeSeconds() }, { JwtRegisteredClaimNames.Nbf, datetimeOffset.ToUnixTimeSeconds() }, { JwtRegisteredClaimNames.Exp, new DateTimeOffset(DateTime.Now.AddSeconds(jwtSettings.ExpiredTime.Value * 60 * 60 * 24 * 30)).ToUnixTimeSeconds() }, { JwtRegisteredClaimNames.Iss, jwtSettings.ValidIssuer }, { JwtRegisteredClaimNames.Aud, jwtSettings.ValidAudience } }); // 设置 Swagger 刷新自动授权 _httpContextAccessor.HttpContext.Response.Headers["access-token"] = output.AccessToken; return(output); }
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); }
public async Task <TData <OperatorInfo> > Login([FromForm] string userName, [FromForm] string password) { var obj = new TData <OperatorInfo>(); var userObj = await _userBLL.CheckLogin(userName, password); if (userObj.Tag == 1) { await _userBLL.UpdateLoginInfo(userObj.Data); await _operatorCache.AddCurrent(userObj.Data.ApiToken); obj.Data = await _operatorCache.Current(userObj.Data.ApiToken); } obj.Message = userObj.Message; var ip = NetHelper.Ip; var browser = NetHelper.Browser; var os = NetHelper.GetOSVersion(); var userAgent = NetHelper.UserAgent; var logLoginEntity = new LogLoginEntity { LogStatus = userObj.Tag == 1 ? OperateStatusEnum.Success.ParseToInt() : OperateStatusEnum.Fail.ParseToInt(), Remark = userObj.Message, IpAddress = ip, IpLocation = IpLocationHelper.GetIpLocation(ip), Browser = browser, OS = os, ExtraRemark = userAgent, CreatorId = userObj.Data == null ? 0 : userObj.Data.Id, CreateTime = DateTime.Now }; await _logLoginBLL.SaveForm(logLoginEntity); if (userObj.Tag == 0) { return(obj); } // 生成前端的token // 生成 token var jwtSettings = App.GetOptions <JWTSettingsOptions>(); var datetimeOffset = DateTimeOffset.UtcNow; var accessToken = JWTEncryption.Encrypt(jwtSettings.IssuerSigningKey, new Dictionary <string, object> { { "UserId", userObj.Data.Id.ToString() }, // 存储Id { "Account", userObj.Data.UserName }, // 存储用户名 { "ApiToken", userObj.Data.ApiToken }, // ApiToken { JwtRegisteredClaimNames.Iat, datetimeOffset.ToUnixTimeSeconds() }, { JwtRegisteredClaimNames.Nbf, datetimeOffset.ToUnixTimeSeconds() }, { JwtRegisteredClaimNames.Exp, DateTimeOffset.UtcNow.AddSeconds(jwtSettings.ExpiredTime.Value * 60).ToUnixTimeSeconds() }, { JwtRegisteredClaimNames.Iss, jwtSettings.ValidIssuer }, { JwtRegisteredClaimNames.Aud, jwtSettings.ValidAudience } }); // 覆盖apitoken,因为前端需要的是jwt生成的token,而缓存使用的是数据库的apitoken字段 obj.Data.JwtToken = accessToken; obj.Tag = userObj.Tag; var claims = new List <Claim> { new Claim(ClaimTypes.Name, userObj.Data.UserName), new Claim("ApiToken", userObj.Data.ApiToken), }; var claimsIdentity = new ClaimsIdentity( claims, CookieAuthenticationDefaults.AuthenticationScheme); var authProperties = new AuthenticationProperties(); await NetHelper.HttpContext.SignInAsync( CookieAuthenticationDefaults.AuthenticationScheme, new ClaimsPrincipal(claimsIdentity), authProperties); return(obj); }