Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class UserRepository : RepositoryBase<User>, IUserRepository
- {
- private IPasswordHasher _passwordHasher;
- public UserRepository(ApplicationDbContext dbContext, IPasswordHasher passwordHasher) : base(dbContext)
- {
- _passwordHasher = passwordHasher;
- }
- public async Task<UserAuthenticatedDto> Authenticate(string email, string password)
- {
- var user = await FindByCondition(x => x.Email == email).FirstOrDefaultAsync();
- if (user is null)
- {
- return null;
- }
- var authenticated = _passwordHasher.Check(user.Password, password, user.Salt);
- if (!authenticated)
- {
- return null;
- }
- // authentication successful so generate jwt token
- var token = GenerateToken(user);
- var authUser = new UserAuthenticatedDto
- {
- Email = user.Email,
- ProfilePicture = user.ProfilePicture,
- Username = user.Username,
- Token = token
- };
- return authUser;
- }
- public async Task<UserAuthenticatedDto> Register(UserRegisterDto dto)
- {
- var salt = _passwordHasher.CreateSalt();
- var hashedPassword = _passwordHasher.Hash(dto.Password, salt);
- var user = new User
- {
- Email = dto.Email,
- Password = hashedPassword,
- Salt = salt,
- Username = dto.Username,
- ProfilePicture = $"https://api.adorable.io/avatars/231/{dto.Email}.png"
- };
- await DbContext.Users.AddAsync(user);
- await DbContext.SaveChangesAsync();
- var token = GenerateToken(user);
- var authUser = new UserAuthenticatedDto
- {
- Email = user.Email,
- ProfilePicture = user.ProfilePicture,
- Username = user.Username,
- Token = token
- };
- return authUser;
- }
- private string GenerateToken(User user)
- {
- var tokenHandler = new JwtSecurityTokenHandler();
- var key = Encoding.ASCII.GetBytes("here is my temporary secret");
- var tokenDescriptor = new SecurityTokenDescriptor
- {
- Subject = new ClaimsIdentity(new Claim[]
- {
- new Claim(ClaimTypes.Name, user.Id.ToString())
- }),
- Expires = DateTime.UtcNow.AddDays(7),
- SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature)
- };
- var token = tokenHandler.CreateToken(tokenDescriptor);
- return tokenHandler.WriteToken(token);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement