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 更改消息?

FormsAuthentication.SetAuthCookie() 是否需要重定向

我以前见过这个,所以我知道答案是肯定的。(如,是的,您确实需要重定向用户以正确使用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;
相关文章: