/// <summary> /// Autoryzuje użytkownika o podanym loginie i haśle. /// </summary> /// <typeparam name="T">Parametr generyczny z bazą danych. Musi dać się utworzyć konstruktorem bezparametrowym /// i zawierać informacje o użytkownikach implementując interfejs IUserContext. /// </typeparam> /// <param name="username">Nazwa użytkownika do autoryzacji.</param> /// <param name="password">Hasło użytkownika do autoryzacji (plain text).</param> /// <returns>Obiekt CustomIdentity odpowiadający użytkownikowi lub null gdy autoryzacja przebiegła niepomyślnie.</returns> public CustomIdentity AuthenticateUser <T>(string username, string password) where T : IUsersContext, IDisposable, new() { using (var context = new T()) { User user = context.Users.FirstOrDefault(x => x.Username.Equals(username)); if (user == null || user.Username.Length != username.Length) { return(null); } string hash = PasswordHashHelper.CalculateHash(password, user.Salt); return(user.HashedPassword.Equals(hash) ? new CustomIdentity(username) : null); } }
/// <summary> /// Autoryzuje użytkownika o podanym loginie i haśle. /// </summary> /// <param name="context">Kontekst bazy danych</param> /// <param name="username">Nazwa użytkownika do autoryzacji.</param> /// <param name="password">Hasło użytkownika do autoryzacji (plain text).</param> /// <returns>Obiekt CustomIdentity odpowiadający użytkownikowi lub null gdy autoryzacja przebiegła niepomyślnie.</returns> public CustomIdentity AuthenticateUser(IUsersContext context, string username, string password) { try { User user = context.Users.FirstOrDefault(x => x.Username.Equals(username)); if (user == null || user.Username.Length != username.Length) { return(null); } string hash = PasswordHashHelper.CalculateHash(password, user.Salt); return(user.HashedPassword.Equals(hash) ? new CustomIdentity(username) : null); } catch (Exception) { return(null); } }