FormsAuthentication.SetAuthCookie() 是否需要重定向
本文关键字:重定向 是否 SetAuthCookie FormsAuthentication | 更新日期: 2023-09-27 18:31:27
在检查用户的凭据并确认它们是否正常后,我正在使用FormsAuthentication.SetAuthCookie("Username", false);
对用户进行身份验证。
在母版页中,我使用 Page.User.Identity.IsAuthenticated
来确保我们处理的是登录用户而不是来宾。
问题在于首先设置身份验证cookie。当我设置身份验证cookie时,紧接着我运行一个方法,该方法使用Page.User.Identity.IsAuthenticated
将欢迎消息从通用的"欢迎,来宾!"消息更改为更个人的"欢迎,用户名!"消息。这在我转到另一个页面之前不起作用,所以我知道登录过程已经奏效,但似乎在刷新或重定向发生之前我无法访问我需要的信息。
设置身份验证 cookie 后,我是否需要重定向用户才能使用 Page.User.Identity.IsAuthenticated
更改消息?
我以前见过这个,所以我知道答案是肯定的。(如,是的,您确实需要重定向用户以正确使用Page.User.Identity.IsAuthenticated
)
我想原因是因为IsAuthenticated
评估当前请求,并且当当前请求首次进入时,它被记录为未经过身份验证。
您需要做的是应用您在所述方法中的任何逻辑,而无需检查IsAuthenicated
(使其假设为真)。
现在我不知道您的方法的细节,以建议如何重构它以应对这种情况,但是您可以将"Do Stuff"部分拆分为一个单独的函数,然后您可以直接从登录函数调用该函数以绕过身份验证检查。
编辑:为了支持我的假设,您可以阅读此页面。
有趣的部分:
表单身份验证票证提供表单身份验证 浏览器发出的下一个请求的信息。
> 我想指出,实际上有一种方法可以解决这个问题(因为我从未在任何其他类似的问题中看到过这样的说法)。您可以在不重定向的情况下检索 User.Identity 信息来源的 Cookie 及其数据。问题是,cookie 尚未发送到浏览器。
它只是从 Response.Cookies 对象获取 FormsAuthentication 制作的 cookie:
HttpCookie EncryptedCookie = Response.Cookies.Get(FormsAuthentication.FormsCookieName);
FormsAuthenticationTicket DecryptedCookie;
try {
DecryptedCookie = FormsAuthentication.Decrypt(EncryptedCookie.Value);
} catch (ArgumentException) {
// Not a valid cookie
return false;
}
// DecryptedCookie.Name: The Username
// DecryptedCookie.UserData: Any additional data, as a string. This isn't normally used
return !DecryptedCookie.Expired;