0

在身份验证控件中,我有以下行将用户标记为在系统中已通过身份验证(在签出密码后):

FormsAuth.SignIn(userName, rememberMe);

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

Page.User.Identity.IsAuthenticated
Request.IsAuthenticated

不工作。他们说用户没有经过身份验证。如何使身份验证立即生效,或者是否有其他方法可以检查用户刚刚登录的时间?

4

3 回答 3

3

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

该函数只调用FormsAuthentication.SetAuthCookie,根据文档,它在response中设置身份验证 cookie 。

这解释了为什么如果您重定向它会起作用(因为客户端将在后续请求中播放 cookie),但不是在调用之后立即起作用。

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

于 2009-06-01T21:30:44.033 回答
0

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

User.Identity.IsAuthenticated;

我会检查以确保您的 AccountController 在您从一个页面移动到另一个页面时正确保存了 Principal 对象。

于 2009-06-01T20:57:59.480 回答
0

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

于 2010-10-11T02:19:20.260 回答