コード例 #1
0
        public RegisterResponse Register(RegisterRequest request)
        {
            var userExists = _context.Client.Any(c => c.Login.Equals(request.Login));

            if (userExists)
            {
                throw new UserAlreadyExistsException("User already Exists!");
            }

            var salt = SaltGenerator.CreateSalt();

            var newClient = new Client()
            {
                FirstName           = request.FirstName,
                LastName            = request.LastName,
                Email               = request.Email,
                Phone               = request.Phone,
                Login               = request.Login,
                Password            = HashGenerator.CreateHashForPassword(request.Password, salt),
                Salt                = salt,
                RefreshToken        = RefreshTokenGenerator.CreateRefreshToken(),
                TokenExpirationDate = DateTime.Now.AddDays(7)
            };

            var newClientClaims = new[]
            {
                new Claim(ClaimTypes.NameIdentifier, Convert.ToString(newClient.IdClient)),
                new Claim(ClaimTypes.Name, newClient.Login),
                new Claim(ClaimTypes.Role, "Client")
            };

            var key         = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["SecretKey"]));
            var credentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);

            var token = new JwtSecurityToken(
                issuer: "*****@*****.**",
                audience: "Clients",
                claims: newClientClaims,
                expires: DateTime.Now.AddMinutes(10),
                signingCredentials: credentials
                );


            _context.Client.Add(newClient);
            _context.SaveChanges();

            return(new RegisterResponse()
            {
                FirstName = newClient.FirstName,
                LastName = newClient.LastName,
                Email = newClient.Email,
                Phone = newClient.Phone,
                Login = newClient.Login,
                AccessToken = new JwtSecurityTokenHandler().WriteToken(token),
                RefreshToken = newClient.RefreshToken
            });
        }
コード例 #2
0
        public LoginResponse Login(LoginRequest request)
        {
            var client = _context.Client.SingleOrDefault(p => p.Login == request.Login);

            if (client == null)
            {
                throw new UserDoesntExistExcetion($"User with {request.Login} login doesn't exist");
            }
            if (!client.Password.Equals(HashGenerator.CreateHashForPassword(request.Password, client.Salt)))
            {
                throw new WrongPasswordException("Wrong Password!");
            }
            var clientClaims = new[]
            {
                new Claim(ClaimTypes.NameIdentifier, Convert.ToString(client.IdClient)),
                new Claim(ClaimTypes.Name, client.Login),
                new Claim(ClaimTypes.Role, "Client")
            };
            var key         = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["SecretKey"]));
            var credentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);

            var token = new JwtSecurityToken(
                issuer: "*****@*****.**",
                audience: "Clients",
                claims: clientClaims,
                expires: DateTime.Now.AddMinutes(10),
                signingCredentials: credentials
                );

            client.RefreshToken        = RefreshTokenGenerator.CreateRefreshToken();
            client.TokenExpirationDate = DateTime.Now.AddDays(7);
            _context.SaveChanges();

            return(new LoginResponse()
            {
                AccessToken = new JwtSecurityTokenHandler().WriteToken(token),
                RefreshToken = client.RefreshToken
            });
        }