2014-10-16 88 views
1

我对MVC没有经验,我正在尝试创建一个主索引页和各种子页面的项目,所有这些都需要用户进行日志记录以及登录/注册页面这是每个人的切入点。MVC 4授权和登录使用

我一直在寻找如何检查和用户重定向到登录页面,当他们尝试直接访问其他网页,或当会话变量过期,我这样做:

[Authorize] 
public class HomeController : Controller 
{ 
} 

Web.config文件:

<system.web> 
    <authentication mode="Forms"> 
     <forms loginUrl="~/Home/Login" timeout="2880" /> 
    </authentication> 
</system.web> 

而且我期待的是,如果用户没有登录,他们重定向到~/Home/Login,但我不认为这正在发生,我得到的错误这些页面,因为我试图使用会话变量来显示他们的用户名在页面等

在登录的代码,我有:

//after I found the user in my database and confirmed his password 
FormsAuthentication.SetAuthCookie(user.userName, false); 

Session["User"] = user; 
return View("Index"); 

我发现如何实现自定义授权,登录和这样的各种解决方案,但我不知道如果这些解决方案已经可以在这个MVC版本上使用(我使用的是4.0),我想尽可能保持最简单的方式,因为我还在学习。

所以基本上我想检查用户是否登录了所有页面,但是登录页面,如果他不是,则将他重定向到登录页面。

如何使用MVC功能来完成此操作?

回答

1

在您的登录操作方法中,您需要使用[AlloyAnonymous]进行修饰。从认证/授权中删除Session的概念。您不需要在会话中存储用户对象,它已经存储在HttpContext中。

+0

你能否详细说明一下?我见过一些指南解释说,有一种方法是每个控制器/方法都被自动设置为仅授权,而我指定允许匿名调用哪些控制器/方法,但是我找不到我设置的位置。 – Danicco 2014-10-16 17:40:01

+0

您可以通过我提到的属性匿名设置哪些方法。相反,如果你想指定哪些方法需要授权,你可以使用[Authorize]属性和你需要的任何角色[Authorize(“ADMINS”)] – 2014-10-16 17:46:30

+0

啊,我不必配置它......这太好了。我仍然有问题,但我的路由配置默认为“索引”功能。我的'''''有'[Authorize]'属性的'Index',我想根据我的web.config中的规定将用户(未记录)发送到'〜/ Home/Login',但它不是工作......它仍然通过'Index'函数,就好像'[Authorize]'没有工作。你会知道为什么会发生这种情况? – Danicco 2014-10-16 17:50:58