コード例 #1
0
ファイル: AccountService.cs プロジェクト: sqlfromhell/Initial
        public async Task <IActionResult> Login(AccountLoginRequest request)
        {
            if (request == null)
            {
                return(new BadRequestResult());
            }

            try
            {
                var passwordHash = CryptoHelper.Guid(request.Password);

                var model = await _repository
                            .GetByEmailPasswordAsync(request.Email, passwordHash);

                if (model == null)
                {
                    return(new NotFoundResult());
                }

                var tokenHandler = new JwtSecurityTokenHandler();

                var key = Encoding.ASCII.GetBytes(_appSettings.Security.Secret);

                var tokenDescriptor = new SecurityTokenDescriptor
                {
                    Subject = new ClaimsIdentity(new Claim[]
                    {
                        new Claim(ClaimTypes.Name, model.Name.ToString()),
                        new Claim(ClaimTypes.Email, model.Email.ToString()),
                        new Claim(ClaimTypes.Sid, model.PublicId.ToString())
                    }),

                    Expires = DateTime.UtcNow.AddDays(_appSettings.Security.Expires),

                    SigningCredentials = new SigningCredentials
                                             (new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature)
                };

                var token = tokenHandler.CreateToken(tokenDescriptor);

                var response = new AccountLoginResponse
                {
                    Email    = model.Email,
                    Id       = model.Id,
                    Name     = model.Name,
                    PublicId = model.PublicId,
                    Token    = tokenHandler.WriteToken(token)
                };

                return(new OkObjectResult(response));
            }
            catch
            {
                return(new ConflictObjectResult(State));
            }
        }