使用Forms身份验证手动记录用户

时间:2010-12-15 20:42:45

标签: asp.net-mvc-2 forms-authentication

我正在尝试为Asp.Net MVC2应用程序实现基于令牌的授权,我认为我的方法是错误的。首先:基于令牌的授权我的意思是当未经身份验证的用户转到http://myapp.com/some/action?tok=[special single-use token here]时,他们会登录。

我的应用中的所有控制器都扩展了一个公共ApplicationController,因此我的方法是覆盖该控制器上的OnAuthorize,如下所示:

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后仍然是假的。)但是整个关于这个的想法是正常地继续请求并避免无意义的重定向。有没有办法实现这个目标?看起来真的不是很多......

1 个答案:

答案 0 :(得分:0)

调用SetAuthCookie后,User.Identity没有任何变化。在下一个请求中,数据将是您所期望的。这里最好的办法是在调用SetAuthCookie后发出重定向。