4

iFrame 内で新しい Facebook Canvas アプリケーションを開発し、ユーザーを承認しようとしています。新しい OAuth api では、アプリでユーザーを承認するために、次のようにリダイレクトすることをお勧めします。

https://graph.facebook.com/oauth/authorize ? client_id=...& redirect_uri= http://www.example.com/oauth_redirect

ただし、これにより、ユーザーからのアクセス許可を要求する完全な Facebook ページが iFrame 自体 (つまり、Facebook 内の facebook) 内でレンダリングされるという奇妙な問題が発生します。古いREST APIメソッドの使用を開始したくないので、新しいOAuth APIでこれを解決する方法を知っている人はいますか?

4

6 に答える 6

0

それどころか、私はこの問題の解決策を見つけました。これは、ここのブログ投稿で概説しています。見てみな。

于 2010-05-03T21:15:34.117 に答える
0

私も同じ問題を抱えていて、Facebookフォーラムに投稿しました。モデレーターから、現時点では解決策がない問題であるとの連絡がありました。このスレッドを見てください-http://forum.developers.facebook.com/viewtopic.php?id= 56590

于 2010-04-30T06:13:08.740 に答える
0

この記事を試してくださいhttp://novacoders.blogspot.com/2011/04/facebook-apps-oauth-20-authorization.html

Web サーバーを使用しない場合は、Javascript SDK を使用する必要があります。FB.init() は、access_token などの必要なすべてのデータを返します。

于 2011-04-07T14:41:20.777 に答える
0

過去 2 日間、これに苦労しており、Facebook 開発者フォーラムでこの問題のハックを見つけました。

于 2010-05-21T07:59:30.707 に答える
0

キャンバス iframe 内で単純なリダイレクト 302 または 301 を実行することはできません。これは、iframe 内のコンテンツのみをリダイレクトするためです。top.locationFacebook が推奨しているのは、ダイアログ/oauth ページに設定する小さな JavaScript を送信することです。

<script>top.location='https://www.facebook.com/dialog/oauth?client_id={0}&redirect_uri={1}&scope=publish_actions';</script>.

clientidAppId でありredirect_uri、認証ダイアログ ページからのリダイレクトを処理するページです。

于 2012-07-09T02:04:57.113 に答える
0

oAuth v2 でそれを行う別の方法があり、これは facebook のドキュメントに記載されていますが、いくつかのページに分割されているため、理解しにくいです。

まず、アプリの「高度なパラメーター」で「OAuth 2.0 for Canvas」フラグを有効にする必要があります。

次に、それを処理する方法を説明する PHP の例を次に示します。

function parse_signed_request($signed_request, $secret) {
    list($encoded_sig, $payload) = explode('.', $signed_request, 2); 

    // decode the data
    $sig = base64_url_decode($encoded_sig);
    $data = json_decode(base64_url_decode($payload), true);

    if (strtoupper($data['algorithm']) !== 'HMAC-SHA256') {
            error_log('Unknown algorithm. Expected HMAC-SHA256');
            return null;
    }

    // check sig
    $expected_sig = hash_hmac('sha256', $payload, $secret, $raw = true);
    if ($sig !== $expected_sig) {
            error_log('Bad Signed JSON signature!');
            return null;
    }

    return $data;
}

function base64_url_decode($input) {
    return base64_decode(strtr($input, '-_', '+/'));
}

$data = parse_signed_request($_REQUEST["signed_request"], <your facebook app api secret>);

if (empty($data["user_id"]) && !isset($_REQUEST['redir'])) {
    // The user isn't authenticated
    $auth_url = "http://www.facebook.com/dialog/oauth?client_id=" .
            <your facebook app id> . "&redirect_uri=" .
            urlencode('http://apps.facebook.com/<yourapp>/?redir=1');
    echo("<script> top.location.href='" . $auth_url . "'</script>");
    die;
}
// Here the user is authenticated
echo ("Welcome User: " . $data["user_id"]);
// And now you have the Graph API auth token in $data["oauth_token"],
// so you can use any graph api method
于 2011-01-12T09:55:56.820 に答える