假设我们有一个用户注册和登录的功能,要求使用哈希加密存储用户密码,并通过存储过程验证用户登录。
CREATE TABLE Users (
UserId INT PRIMARY KEY IDENTITY(1,1),
Username NVARCHAR(50) NOT NULL UNIQUE,
PasswordHash NVARCHAR(256) NOT NULL
);
CREATE PROCEDURE ValidateUser
@Username NVARCHAR(50),
@Password NVARCHAR(256),
@IsValid BIT OUTPUT
AS
BEGIN
SET @IsValid = 0;
DECLARE @PasswordHash NVARCHAR(256);
SELECT @PasswordHash = PasswordHash FROM Users WHERE Username = @Username;
IF @PasswordHash IS NOT NULL AND @PasswordHash = HASHBYTES('SHA2_256', @Password)
SET @IsValid = 1;
END;
注意:这里的HASHBYTES
函数是SQL Server特有的,用于生成哈希值。在实际应用中,你可能需要根据所使用的数据库调整这部分代码。
public class UserController : Controller
{
private readonly YourDbContext _context;
public UserController(YourDbContext context)
{
_context = context;
}
[HttpPost]
public async Task<IActionResult> Login(LoginViewModel model)
{
if (ModelState.IsValid)
{
var isValid = false;
using (var connection = new SqlConnection(_context.Database.GetDbConnection().ConnectionString))
{
await connection.OpenAsync();
using (var command = new SqlCommand("ValidateUser", connection))
{
command.CommandType = CommandType.StoredProcedure;
command.Parameters.AddWithValue("@Username", model.Username);
command.Parameters.AddWithValue("@Password", model.Password);
command.Parameters.Add("@IsValid", SqlDbType.Bit).Direction = ParameterDirection.Output;
await command.ExecuteNonQueryAsync();
isValid = (bool)command.Parameters["@IsValid"].Value;
}
}
if (isValid)
{
// 登录成功,执行相应操作
}
else
{
ModelState.AddModelError("", "Invalid username or password.");
}
}
return View(model);
}
}
注意:这里的YourDbContext
是你的实体框架上下文类,需要根据实际情况调整。
希望以上信息能帮助你理解如何使用哈希加密、C#、ASP.NET MVC和实体框架的存储过程验证账户。如有其他问题,请随时提问。
领取专属 10元无门槛券
手把手带您无忧上云