MVC 4 应用中 ASP.NET 自定义身份验证
本文关键字:NET 自定义 身份验证 ASP 应用 MVC | 更新日期: 2023-09-27 17:56:25
我正在将旧的 ASP.NET Web 窗体应用程序迁移到 MVC 4 ASP.NET。我对MVC不是很熟悉 ASP.NET 所以如果这是一个愚蠢的问题,我深表歉意。简而言之,我的 ASP.NET Web 窗体应用程序使用以下代码行在登录时重定向用户:
FormsAuthentication.RedirectFromLoginPage(username, true);
我以为我可以复制并粘贴这段代码。但是,我注意到它试图将用户重定向到"默认.aspx"。此调用的 MVC 等效项是什么?
谢谢!
身份验证通常提供一个returnUrl
作为查询字符串参数(这是我假设FormsAuthentication.RedirectFromloginPage(username, true)
正在使用的参数。话虽如此,请在returnUrl
中接收的登录操作中添加一个参数,然后在登录操作中使用该参数。
[HttpPost]
public ActionResult Login(LoginViewModel model, String returnUrl)
{
if (ModelState.IsValid)
{
// perform login
if (YourFormsAuthentication.YourLoginMethod(mode.username, model.password))
{
//
// Set auth cookie, log user in, etc.
//
// Now check for returnUrl and make sure it's present and
// valid (not redirecting off-site)
if (!String.IsNullOrEmpty(returnUrl) && Url.IsLocalUrl(returnUrl))
{
return Redirect(returnUrl);
}
// no returnUrl provided, direct them to default landing page
return RedirectToRoute("Home");
}
else
{
ModelState.AddError("", "Username or password are incorrect.");
}
}
return View(model);
}
在控制器中的登录方法上,添加一个参数字符串 returnUrl。
然后检查它是空的还是空的。如果不是重定向。
[HttpPost]
public ActionResult LogOn(LogOnModel model, string returnUrl)
{
// Do your login
// if success
if (!String.IsNullOrEmpty(returnUrl))
{
return Redirect(returnUrl);
}
}
在您的视图中,还要传递 returnUrl(这将是 Request.Url)
<%: Html.ActionLink("Log On", "LogOn", "ControllerName", new { returnUrl = Request.Url }, null)%>
这里有完整的示例: http://www.c-sharpcorner.com/UploadFile/cd3310/using-mvc-Asp-Net-tools-create-simple-login-form/
使用具有特定操作的控制器进行查看
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Login(YourModel model)
{
if (!ModelState.IsValid)
{
return View("Login", model);
}
return RedirectToAction("Index");
}
在 MVC 4 中,如果创建新应用程序并选择 Internet 应用程序选项,则模板将连接所有内容以进行表单身份验证,并将设置为使用 SimpleMembership 提供程序,这样可以更轻松地自定义用户配置文件,并添加对轻松插入 OAuth 的支持。 您的 web.config 中应该有以下条目。
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>
这会告知应用程序在用户未经过身份验证或授权时重定向到 loginUrl。 然后,您只需在控制器或操作上使用授权属性即可。 如果要使用基于角色的授权,或者只是在没有角色的情况下使用它,则可以将角色添加到此属性。在这里,我为HomeController的联系人操作添加了一个AuthorizeAttribute。
[Authorize(Roles="Admin")]
public ActionResult Contact()
{
ViewBag.Message = "Your contact page.";
return View();
}
此操作位于由 MVC 4 Internet 模板创建的默认主控制器上。 用户体验是,如果他们单击主页上的"联系人"选项卡并且未登录,他们将被重定向到登录页面。成功登录后,他们将被重定向回"联系人"页面。因此,MVC 4 互联网应用程序为您连接了所有内容,您不必显式处理重定向。有关自定义 SimpleMembership 提供程序的详细信息,可以阅读此博客。