1

AffiliateLoginを設定するコントローラーに関数がありPrincipalます。
principal.User = user;は実際にはプリンシパルを格納する行です。しかし、別のコントローラーにリダイレクトしてAuthorizeWithRolesAttribute属性をテストすると、プリンシパルがリセットされます。
これはログインの 1 秒後です。赤い矢印が表示されます。

ここに画像の説明を入力

これはそれを格納する関数です。
私は何を間違っていますか?
ありがとう

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 に答える