Так что в основном у меня есть хранимая процедура, которая может расшифровать пароль и вернуть 1, если пользователь существует. Вот код:
CREATE PROCEDURE [dbo].[ValidateAccount]
@Username VARCHAR(50),
@AccountPwd VARCHAR(100)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @Salt CHAR(25);
DECLARE @PwdWithSalt VARCHAR(125);
DECLARE @PwdHash VARBINARY(20);
SELECT @Salt = Salt, @PwdHash = [Pass]
FROM dbo.Users
WHERE Username = @Username;
SET @PwdWithSalt = @Salt + @AccountPwd;
IF (HASHBYTES('SHA1', @PwdWithSalt) = @PwdHash)
RETURN 1;
ELSE
RETURN 0;
END;
А также есть логин:
@using (Html.BeginForm("Index", "Home", FormMethod.Post))
{
<div class="form-group">
<i class="fa fa-user"></i>
<!-- I'm using htmlAtributes to add CSS class styles and HTML atributes on Editor controls-->
@Html.EditorFor(model => model.Username , new { htmlAttributes = new { @class = "form-control", @required = "true", @placeholder = "Username" } })
</div>
<div class="form-group">
<i class="fa fa-lock"></i>
@Html.TextBoxFor(model => model.Pass , new { data_bind = "value: Password", @class = "form-control", @required = "true", @placeholder = "Password", @type = "password" })
</div>
<div class="form-group">
<input type="submit" class="btn btn-primary btn-block btn-lg" value="Login">
</div>
}
У меня есть модель:
public partial class Users
{
public string Username { get; set; }
public byte[] Pass { get; set; }
public string Name { get; set; }
public string Salt { get; set; }
public int ID { get; set; }
}
Как видите, 'Столбец Pass 'в базе данных - Byte[]
, поэтому у меня возникают проблемы с выполнением процедуры и проверкой, существует ли пользователь или нет, и предпринимаются такие действия, как переход на панель инструментов.
Есть идеи? Я не былсмог найти практическое решение на этом
Вот контроллер Home, где я должен сделать проверку:
[HttpPost]
public ActionResult Index(Warehouse_APP.Models.Users userMod)
{
return View();
}