1

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

在此处输入图像描述

这是存储它的函数。
我究竟做错了什么?
谢谢

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");
        }
4

2 回答 2

0

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

于 2012-10-25T12:24:54.730 回答
0

如果您正在做自定义身份验证/表单身份验证,您应该调用

 FormsAuthentication.SetAuthCookie 

来自浏览器的下一个带有该 cookie 的 http,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

于 2012-12-22T12:07:51.193 回答