2009-06-01 56 views
0

在身份验证控件中,我有以下行标记用户在系统中已验证身份(签出密码后):将身份验证设置为true,以在ASP中执行身份验证的控件的视图MVC

FormsAuth.SignIn(userName, rememberMe); 

如果我重定向,这是标准的behvaior,一切都很好。但是,如果我立即显示视图,通常的方法来检查用户是否通过身份验证:

Page.User.Identity.IsAuthenticated 
Request.IsAuthenticated 

不起作用。他们说用户不认证。我怎样才能使认证立即生效或有另一种方式来检查,让我找出用户刚刚登录?

回答

3

FormsAuth.SignIn是从Visual Studio创建新的ASP.NET MVC项目时生成的函数。

即功能只是简单地调用FormsAuthentication.SetAuthCookie,它根据该文档,在设定的响应认证的cookie。

这解释了为什么如果您重定向(因为客户端将在后续请求中播放该cookie),但不是在呼叫之后它工作正常。

重定向是正确/常规的方式,但是如果您绝对坚持在重定向之前检查身份验证,那么您可以在会话状态中创建一个IsAuthenticated标志,并在检查时引用该标志。

0

在您的控制器上,您应该能够使用以下内容来检查它们是否已通过身份验证。

User.Identity.IsAuthenticated; 

我会检查,以确保您的AccountController正确保存主要对象,你从页移动。

0

除了使用FormsAuth.Signin或FormsAuthentication.SetAuthCookie,您还可以在登录代码执行时手动设置User.Identity在登录控件中。如上所述,原因是因为FOrmsAuth.SignIn只是简单地设置了下次在Request_OnAuthenticate事件中拾取的身份验证Cookie。 (它简单地解码cookie并设置HttpContext.User属性)