1

我和一位开发人员正在将一个 WebForms 项目移植到 MVC3 中,我们对此并不陌生。我们已经将 WebForms 母版页移植到了 MVC3 布局页面,但让我们感到震惊的一件事是登录用户的 Session。

在 WebForms 母版页中,我们检查 Session 以确保 Session("LoggedInUser") 具有值,如果没有,则重定向到登录页面。

我们不确定如何在 MVC3 中复制这一点,而且我的谷歌搜索结果不足。在布局页面中放置这种逻辑似乎有点邪恶,但也许我疯了。当然,有更好的方法来做到这一点,而不是在每一个行动方法中都进行这样的检查......如果有人能指出我们正确的方向,我们会很乐意潜入研究。

非常感谢。

4

3 回答 3

1

如果您使用表单身份验证,您很可能希望使用Authorize属性装饰每个控制器或控制器操作,这将为您执行检查并将用户重定向到配置的登录页面

在 c# 中,您可能会这样做:

[Authorize]
public Controller MyController
{


}

您还可以将用户或组列表指定为属性的参数。登录页面在 web.config 中指定。

于 2012-07-23T18:48:41.207 回答
1

您所要做的就是在所有控制器上添加 [Authorize] 标签。如果您未登录,它会自动将您重定向到 web.config 中指定的登录页面。

更好的是,您可以创建一个 BaseController ,每个其他控制器都将从中继承。

基本控制器

[Authorize]
public abstract class BaseConroller : Controller
{

}

其他控制器

public class HomeController : BaseController
{

}

HomeController 中的每个操作都将根据您的 FromsAuthentication 设置进行重定向。

于 2012-07-23T18:48:50.373 回答
1

如果您使用表单身份验证,则可以使用 User.Identity.IsAuthenticated 检查用户是否经过身份验证。

例子:

if(User.Identity.IsAuthenticated)
{
    //Do Stuff
}
else
{
     //Redirect to login
}

就个人而言,我使用流利的安全性来保护我的网站。http://www.fluentsecurity.net/

希望这可以帮助,

于 2012-07-23T18:49:10.237 回答