コード例 #1
0
        /// <inheritdoc cref="IPlayerService.LoginAsync"/>
        public async Task <string> LoginAsync(string username, string password)
        {
            if (username is null)
            {
                throw new ArgumentNullException(nameof(username));
            }

            if (password is null)
            {
                throw new ArgumentNullException(nameof(password));
            }

            if (string.IsNullOrWhiteSpace(username))
            {
                throw new ArgumentException(nameof(username));
            }

            if (string.IsNullOrWhiteSpace(password))
            {
                throw new ArgumentException(nameof(password));
            }

            Player player = await _dbContext.Players.FirstOrDefaultAsync(p => p.Username == username);

            if (player is null)
            {
                throw new PlayerNotFoundException();
            }

            if (!BCrypt.Net.BCrypt.Verify(password, player.HashedPassword))
            {
                throw new WrongPasswordException();
            }

            var token = Guid.NewGuid().ToString();

            player.SessionToken = token;

            _dbContext.Update(player);
            await _dbContext.SaveChangesAsync();

            return(token);
        }