校长在一次请求后迷路了

时间:2012-10-25 12:20:06

标签: c# asp.net-mvc security userprincipal

我在设置AffiliateLogin的控制器中有Principal函数 行principal.User = user;实际上是存储Principal的行。 但是在我重定向到另一个控制器并测试我的AuthorizeWithRolesAttribute属性后,主体被重置 这是登录后的一秒钟,您可以看到红色箭头:

enter image description here

这是存储它的功能 我做错了什么?
谢谢

public JsonResult AffiliateLogin(string email, string password)
        {
            if (ModelState.IsValid)
            {
                Affiliate user = api.GetUserByCredencials<Affiliate>(email, password);
                if (user != null)
                {

                     IIdentity identity = new UserIdentity(true,user.Email);
                    UserPrincipal principal = new UserPrincipal(identity, new string[] {"Affiliate"});
                    principal.User = user;

                    HttpContext.User = principal;
                    return Json("Login success");
                }
            }
            return Json("Fail To Login");
        }

2 个答案:

答案 0 :(得分:0)

主要属性在Web请求之间无法生存。重定向后,您必须在下一个请求中再次设置它。

答案 1 :(得分:0)

如果您正在进行自定义身份验证/表单身份验证,则应调用

 FormsAuthentication.SetAuthCookie 

来自浏览器的下一个http与该cookie,Asp.net将处理cookie并设置 现任索赔负责人。所以你可以检查

var principal = ClaimsPrincipal.Current;  //normally this reverts to Thread.CurrentPrincipal,

这是一个学习更多的好地方    http://msdn.microsoft.com/en-us/library/system.security.claims.claimsprincipal.current