我创建了空白的Asp.Net-MVC 3 Web应用程序,并希望编写自己非常简单的身份验证。创建了一个数据库,其中将存储有关用户的所有信息。创建一个控制器,使用文本框查看登录名和密码。 所以现在用户打开我的网站,输入他的登录名和密码,这些信息在服务器上接收并处理(通过我自己的ValidateUser方法)。我应该在哪里存储有关此用户的信息以供进一步使用?
如果您不理解我想要的内容,那么问题是:我可以在不使用标准MembershipRoles和MembershipProviders的情况下实现自己的身份验证过程吗?
答案 0 :(得分:1)
在您向POST表单发布的控制器操作中,您可以针对您的数据库验证凭据,如果成功发出了一个包含当前连接用户的用户名的身份验证cookie,以便您可以在后续操作中检索它。
例如,假设您的表单包含发布到LogOn方法的用户名和密码字段:
[HttpPost]
public ActionResult LogOn(string username, string password)
{
// TODO: up to you to implement the VerifyCredentials method
if (!VerifyCredentials(username, password))
{
// wrong username or password:
ModelState.AddModelError("", "wrong username or password");
return View();
}
// username and password match => emit an authentication cookie:
FormsAuthentication.SetAuthCookie(username, false);
// and redirect to some controller action which is protected by the
// [Authorize] attribute and which should be accessible only to
// authenticated users
return RedirectToAction("SomeProtectedAction", "SomeController");
}
并且在受保护的操作中,您可以从Cookie中获取当前连接的用户名,如下所示:
[Authorize]
public ActionResult SomeProtectedAction()
{
string username = User.Identity.Name;
// TODO: here you could query your database to find out more about
// the user given his username which must be unique
...
}
答案 1 :(得分:1)
当然你可以 - 你的问题的第一部分的答案是'它取决于'。这取决于您希望如何/何时使用它。
内置身份验证将令牌存储在用于重新身份验证的Cookie中。
作为一个警告 - 你需要一个很好的理由自己实现这个 - 很容易弄错,并在你的网站上留下漏洞。
答案 2 :(得分:1)
您可以编写自己的自定义MemberShipProvider并调用自己的ValidateUser方法。
选中此Implementing a Membership Provider
如果你这样做,那么你可以使用
这样的优势答案 3 :(得分:0)
是的,完全有可能(我们不在此处使用表格身份验证)。
但;您需要对所有负全部责任,包括:
当然是非常容易实现的,但需要有充分的理由,并且要小心。
(?admin=true
出了什么问题,是吗?)