示例#1
0
        public async Task <ServiceResponse <AuthenticateViewModel> > Register(RegisterRequest request)
        {
            var isEmailValid = EmailValidator.IsEmailValid(request.Email);

            if (!isEmailValid)
            {
                return(ServiceResponse <AuthenticateViewModel> .Error("Invalid email"));
            }

            var player = await _context.Players.FirstOrDefaultAsync(
                x => x.Email == request.Email);

            if (player != null)
            {
                return(ServiceResponse <AuthenticateViewModel> .Error("Email already exist"));
            }

            var(isPasswordValid, passwordMessage) = _passwordValidator.ValidateAsync(request.Password);

            if (!isPasswordValid)
            {
                return(ServiceResponse <AuthenticateViewModel> .Error(passwordMessage));
            }

            var hashedPassword =
                _passwordHasher.HashPassword(player, request.Password);


            var refreshToken = _jwtHelper.GenerateRefreshToken();

            var newPlayer = new Player
            {
                Email        = request.Email,
                PasswordHash = hashedPassword,
                Nick         = request.Nick,
                RefreshToken = refreshToken,
            };

            await _context.Players.AddAsync(newPlayer);

            await _context.SaveChangesAsync();

            var accessToken = _jwtHelper.GenerateJwtToken(newPlayer);

            return(ServiceResponse <AuthenticateViewModel> .Ok(
                       new AuthenticateViewModel(accessToken, refreshToken.Token)));
        }