Asp.net mvc 2 使用表单身份验证手动登录用户

Asp.net mvc 2 使用表单身份验证手动登录用户,asp.net-mvc-2,forms-authentication,Asp.net Mvc 2,Forms Authentication,我正在尝试为Asp.NETMVC2应用程序实现基于令牌的授权,我认为我的方法是错误的。首先:基于令牌的授权是指当未经验证的用户进入http://myapp.com/some/action?tok=[此处为特殊一次性使用令牌]他们已登录 我的应用程序中的所有控制器都扩展了一个通用的应用程序控制器,因此我的方法是覆盖该控制器上的授权,如下所示: class ApplicationController { protected override void OnAuthorization(Auth

我正在尝试为Asp.NETMVC2应用程序实现基于令牌的授权,我认为我的方法是错误的。首先:基于令牌的授权是指当未经验证的用户进入
http://myapp.com/some/action?tok=[此处为特殊一次性使用令牌]
他们已登录

我的应用程序中的所有控制器都扩展了一个通用的
应用程序控制器
,因此我的方法是覆盖该控制器上的
授权
,如下所示:

class ApplicationController
{
    protected override void OnAuthorization(AuthorizationContext filterContext)
    {
        if (filterContext.HttpContext.Request.QueryString["tok"] != null)
        {
            var token = HttpUtility.UrlDecode(filterContext.HttpContext.Request.QueryString["tok"]);

            if ((var user = getUserByToken(token)) != null)
            {
                 FormsAuthentication.SetAuthCookie(user.Email, false);
            }
            else{ /* highly-proprietary handling of invalid token */ }
        }
        base.OnAuthorization(filterContext);
    }
}
我绝对肯定,
SetAuthCookie
应该被调用,而不应该被调用


问题是,这并不能真正让用户登录。它设置了一个cookie,这意味着我必须重定向(
User.Identity.IsAuthenticated
在调用
SetAuthCookie
后仍然为false),但这样做的目的是继续正常的请求,避免无意义的重定向。有什么方法可以实现这个目标吗?调用SetAuthCookie后,User.Identity没有任何变化。在下一个请求中,数据将是您所期望的。这里最好的做法是在调用SetAuthCookie后发出重定向。

设置User.Identity(基本上是强制立即登录)是否有一个好方法?我不想说没有方法,因为我肯定有(HttpContext.User是可设置的),但要完全正确地进行设置,当一个请求第一次出现时,你会想做ASP.NET所做的一切,如果是我,我会太担心会遗漏一些东西。在我看来,重定向是最安全的选择。你可以重定向到同一个页面(可能不使用查询字符串),它不必是不同的URL。我现在只使用重定向,因为基本上你说的是确保所有需要发生的事情都会发生。这样做没有什么不同,这似乎很奇怪。我想看看是否有其他答案,但如果没有,我想我会给你:P。看起来堆栈溢出,其他StackExchange站点也会这样做。您收到一条已登录的消息,需要刷新页面。