예제 #1
0
        public async Task <GetTokenResponse> Handle(GetTokenCommand request, CancellationToken cancellationToken)
        {
            if (!string.IsNullOrEmpty(request.UserName) && !string.IsNullOrEmpty(request.Password))
            {
                // ensure we have a user with the given user name
                var player = await _playerRepository.FindByName(request.UserName);

                if (player != null)
                {
                    // validate password
                    if (await _playerRepository.CheckPassword(player, request.Password))
                    {
                        // generate refresh token
                        var refreshToken = _tokenFactory.GenerateToken();
                        player.AddRefreshToken(refreshToken, player.Id, request.RemoteIpAddress);
                        await _playerRepository.Update(player);

                        // generate access token
                        var generateEncodedToken = await _jwtFactory.GenerateEncodedToken(player.IdentityId, player.UserName);

                        return(new GetTokenResponse {
                            AccessToken = generateEncodedToken,
                            RefreshToken = refreshToken
                        });
                    }
                }
            }

            return(null);
        }