我有一些代码,我将它放在母版页的代码隐藏中。此母版页是我的主要布局,代码的目的是检查用户是否已登录并根据它们是否进行相应的操作。我有兴趣听听如何处理这个的替代方法,但我现在这样做,因为它是来自另一个MVC框架的直接端口,我想在端口期间尽可能少地改变代码或流程。
我真正的问题是,如何确定正在执行的当前控制器,操作和视图的名称?代码隐藏中的一些逻辑取决于知道当前页面名称。具体来说,它说(伪代码):
if (!isLoggedIn && !isLoginPage)
Redirect(loginPage);
所以,我需要知道我是否已经在登录页面上以避免无限重定向循环。我目前正在通过检查Url以查看它是否包含字符串/ Login /来实现此目的,但这很麻烦,我宁愿使用更强大和更智能的方法。
答案 0 :(得分:4)
用户是否已登录(假设您正在使用FormsAuth)的最佳检查是User.Identity.IsAuthenticated,可从Views或Controller访问。
听起来像你需要在这里插入Forms auth - 它会为你处理一切,包括重定向。在您的web.config中,确保添加:
<authentication mode="Forms">
<forms loginUrl="~/Account/Login"/>
</authentication>
这告诉您的应用,您正在使用表单身份验证。接下来,对要锁定的方法使用ActionFilter:
/// <summary>
/// Default view
/// </summary>
/// <returns></returns>
[Authorize(Roles="Administrator")]
public ActionResult Index()
{
return View();
}
这将与表单auth一起使用以确保用户的标识。它还会自动将当前URL作为重定向附加,并忽略登录视图 - 所有这些都是自动完成的并为您完成。
答案 1 :(得分:2)
查看控制器和控制器操作的Authorization属性。它应该可以避免在母版页后面的代码中做任何事情。
答案 2 :(得分:1)
请注意,有许多方法可以将数据传递到概述为here的母版页。