0

アプリケーションに Facebook ログインを追加しようとしています。その範囲で、次のコード スニペットを使用しています。

    [FacebookAuthorize]
    public ActionResult About()
    {
        ViewBag.Message = "Your app description page.";

        return View();
    }

そして、フィルターFacebookAuthorizeFilterを登録します。

/Home/About に移動すると、エンドレス リダイレクトが表示されます。

/Home/About?code=AQAPoxl1J-.......

ASP.NET MVC4 プロジェクト テンプレートで提供されている OAuth を使用するだけで、facebook を使用してログインできます。

私は何が欠けていますか?

4

2 に答える 2

1

FacebookAuthorize フィルター コードをさらに掘り下げました。フィルターがキャンバス以外のアプリケーションで機能しない理由は、フィルターの OnAuthorization メソッド内で、ユーザーがアプリケーションにリダイレクトされたときに POST 要求に存在する Facebook の signed_request にメソッドが依存しているためです。signed_request が存在しない場合、フィルターは引き続きリダイレクトします。

...コード省略...

        if (signedRequest == null || String.IsNullOrEmpty(userId) || String.IsNullOrEmpty(accessToken))
        {
            // Cannot obtain user information from signed_request, redirect to Facebook OAuth dialog.
            string redirectUrl = GetRedirectUrl(request);
            Uri loginUrl = client.GetLoginUrl(redirectUrl, _config.AppId, null);
            filterContext.Result = CreateRedirectResult(loginUrl);
        }

...コード省略..

別の方法として、コード クエリ文字列パラメーターの存在を確認する同様のフィルターを作成することもできます。コードを取得したら、アプリケーションの appId と appSecret を使用して、コードをアクセス トークンと交換できます。アクセス トークンを取得したら、ユーザーが付与したアクセス許可を特定し、適切に処理できます。

于 2013-08-30T20:56:17.453 に答える
0

デバッグ、反映、ソースコード分析に何時間も費やした後、 FacebookAuthorizeAttributeFacebookAuthorizeFilterは Facebook Canvas アプリケーションでのみ意味のある使用ができるという結論に達しました。

于 2013-08-01T16:22:40.913 に答える