Код: Выделить всё
[HttpPost]
public IActionResult Login(LoginViewModel model)
{
try
{
if (!ModelState.IsValid)
{
return View(model);
}
byte[] passwordBytes = Encoding.UTF8.GetBytes(model.Password);
var user = userBS.Login(model.Username, passwordBytes);
if (user != null)
{
return RedirectToAction("Index", "Home");
}
ModelState.AddModelError("", "Invalid login attempt");
return View(model);
}
catch (Exception ex)
{
ModelState.AddModelError("", "An unexpected error occurred. Please try again later.");
return View(model);
}
}
// Fetch the stored user with the encrypted password
var user = context.Users
.Where(u => u.Name == username)
.Select(u => new
{
u.Id,
u.Name,
EncryptedPassword = u.LoginPassword
})
.SingleOrDefault();
if (user == null)
{
return null; // User not found
}
// Encrypt the provided password and compare with the stored encrypted password
var encryptedInputPassword = EncryptPassword(loginPassword);
if (encryptedInputPassword.SequenceEqual(user.EncryptedPassword))
{
return new User { Id = user.Id, Name = user.Name };
}
return null; // Invalid login attempt
private byte[] EncryptPassword(byte[] password)
{
// Placeholder for encryption logic
// Ensure this matches the logic used for PWDENCRYPT
return password;
}
Код: Выделить всё
using BOL_BussinessLayer_;
namespace DAL_DataAccessLayer_.Interface
{
public interface IUserDB
{
IEnumerable GetAll();
bool Register(User user);
User Login(string username, byte[] loginPassword);
}
}
пароль зашифрован в SQL Server с помощью pwdencrypt.
Подробнее здесь: https://stackoverflow.com/questions/788 ... w-can-decr