2

これを標準の Web フォームで機能させるにはどうすればよいでしょうか?

私がやろうとしているのはAspNetUserClaims、Facebook (または他のサービス) から返されたクレームからテーブルを作成することです。以下のコードの OnAuthenticated で値が返されるのを確認できます。これらのクレームを現在ログインしているユーザーのコンテキストに追加するにはどうすればよいですか?


現在、OnAuthenticated火災の後、組み込みの例が提供するように、明らかにページ (RegisterExternalLogin.aspx) に戻ります。ただし、クレームはなくなり、Facebook へのログインのコンテキストはなくなりました。

MVC を使用せずに、現在ログインしているユーザーのコンテキストに基づいて、Facebook からのクレームを AspNetUserClaims テーブルにどのように入力しますか?

        var fboptions = new FacebookAuthenticationOptions();
        fboptions.AppId = "xxxxxxxxxxxxxxxxxxx";
        fboptions.AppSecret = "yyyyyyyyyyyyyyyyyyyyyy";
        fboptions.Scope.Add("email");
        fboptions.Scope.Add("friends_about_me");
        fboptions.Scope.Add("friends_photos");

        fboptions.Provider = new FacebookAuthenticationProvider()
        {
            OnAuthenticated = (context) =>
            {
                foreach (var v in context.User)
                {
                    context.Identity.AddClaim(new System.Security.Claims.Claim(v.Key, v.Value.ToString()));
                }
                context.Identity.AddClaim(new System.Security.Claims.Claim("FacebookAccessToken", context.AccessToken));
                return Task.FromResult(0);
            },
        };
        app.UseFacebookAuthentication(fboptions);
4

1 に答える 1

1

Web フォームに直接回答することはできません。MVC からのプロセスも同様のはずです。

ログイン後、外部プロバイダーを使用して、新しいユーザーを登録するページに移動します。そのページからのポストバックの後、次のClaimsIdentityような行を追加してすべてを取得する必要があります。

ClaimsIdentity claimsIdentity = await
 AuthenticationManager.GetExternalIdentityAsync (
                        DefaultAuthenticationTypes.ExternalCookie);

上記のこの行への呼び出しがないと、まったく機能しませんでした。おそらく、そこに問題があります。

ClaimsIdentityIDのプロパティに対するクレームのコレクションを反復すると、実行Claimsできます。これには、OnAuthenticated コールバック デリゲートで追加した Facebook トークンが含まれている必要があります。あとは、呼び出しUserManager.AddClaimAsync()てクレーム データベース テーブルに追加するだけです。

詳細については、 https://github.com/beabigrockstar/AspNetIdentitySocialProfileImage/blob/master/Controllers/AccountController.csAccountControllerで私のクラスを参照してください。

メソッドを具体的に見る

 ExternalLoginConfirmation(ExternalLoginConfirmationViewModel model,
                           string returnUrl) 

そして への呼び出しStoreAuthTokenClaims()、そしてもちろん で従うプロセスStoreAuthTokenClaims()

于 2013-11-07T03:48:38.823 に答える