0

クライアント (JS) とサーバー (PHP) の両方で Facebook SDK のメソッドを使用する必要がある小さな Facebook アプリケーションを構築しています。クライアントでは主に FB.ui メソッドを使用しており、サーバーでは Graph API をよく使用しています。

しかし、ユーザーに2回ログインを強制することなくそれを行う方法はありますか? ユーザーを一度ログインさせ、そのログインをクライアントとサーバーの両方に使用するにはどうすればよいですか? これは可能ですか?

4

3 に答える 3

2

JS および PHP で Facebook SDK を 1 回のログイン (またはログインなし) で使用する最良の方法は、トークンを使用することです。「サーバー側」のプロセスは、JS と PHP で同じです。

このプロセスは、最初のユーザー ログインや、有効期限が切れたときに新しいトークンを取得する場合に役立ちます。

  1. ユーザーはページから Facebook にリダイレクトされ、アプリケーションが承認されます。
  2. ユーザーが同意すると、Facebook はトークン、Facebook ID、名、姓、電子メールなどを使用してページ上のユーザーをリダイレクトします。
  3. ユーザー情報をデータベースに保存する

これで、アプリケーションは、ユーザーのログインなしで (JS、PHP、またはその他で) Facebook に接続できます。必要な要素は、appIdsecret、 user ID、および user tokenです。

お役に立てれば幸いです

于 2013-01-22T00:56:22.767 に答える
0

チュートリアルのFacebookアプリケーションをデプロイするためにHerokuを使用したときに、私が学んだことのない巧妙なトリックが1つあります。Herokuが提供したサンプルテンプレートでは、Facebookのログインボタンがあり、次のようにauth.authResponseChangeをサブスクライブしました。-

FB.Event.subscribe('auth.authResponseChange', function(response) {
    window.location = window.location;
});

これにより、ページが更新され、Facebookの認証後にJavaScriptSDKによって設定されたCookieがPHPSDKで使用できるようになります。PHP SDKを使用してユーザーにログインすることもできます。ユーザーがログインすると、JavaScriptSDKから再度ログインしなくてもJavaScriptSDKを使用できるようになります。

于 2013-01-22T07:04:16.973 に答える
0

実際、トークンはかなり早く期限切れになるため、これは機能しません。offset_accessも削除されたため、ユーザーは、ユーザーとの接続を維持するときにFacebookアプリを明示的に使用する必要があります(トークンの有効期限が切れると、ユーザーは何もできなくなります)。

ログインのために現在のトークンを保存することはできますが、ユーザーがFB経由で再度ログインするたびにユーザーテーブルを更新する必要があります。

また、トークンを介してログインすることはできませんが、JSまたはPHPでトークンを取得するのは非常に簡単です。

    FB.getLoginStatus(function(response) {
    if (response.status === 'connected') {
        //user is logged in and has accepted you apps stuff.

        var uid = response.authResponse.userID;
        var accessToken = response.authResponse.accessToken;
        // do some fancy ajax function to send the token to the server here. 
    } 
    else if (response.status === 'not_authorized') {
        // the user is logged in to Facebook, 
        // but has not authenticated your app
        FB.login(function(response) {
           if (response.authResponse) {
             console.log('Welcome!  Fetching your information.... ');
             FB.api('/me', function(response) {
               console.log('Good to see you, ' + response.name + '.');
             });
           } else {
             console.log('User cancelled login or did not fully authorize.');
           }
         }), {scope: 'email,user_likes'}); //specify all the scopes you need for your app here. 
    } 
    else 
    {
        //user is not logged in to facebook. 
    }
 });

これがトークンを取得するためのJSの部分であり、PHPで取得する場合は、さらに簡単です。

    <?php
require_once("/FBAPI/src/facebook.php");
$config = array();
$config['appId'] = 'your_app_id';
$config['secret'] = 'your_app_secret';
$facebook = new Facebook($config);

$user = $facebook->getUser();
if(!$user){
    $loginUrl = $facebook->getLoginUrl(array('scope'=>'publish_stream', 'redirect_uri'=>'http://www.example.com'));
}
if($user){
    try{
        $user_profile = $facebook->api('/me');
        $access_token = $facebook->getAccessToken();
    }
    catch(FacebookApiException $e){
        error_log($e);
        $user = NULL;
    }
}
else{
    echo '<a href="'.$loginUrl.'"><img src="img/login.png"/></a>';
}
?>

編集:実際、あなたはこのようにそれを行うことができます:

ログイン用のランディングページを表示し、ユーザーがJS経由でログインできるようにします。ログインプロセスが完了するとすぐに、ユーザーが$ facebook-> getUser()を介してログインしているかどうかを確認できます。PHPSDKの機能

于 2013-01-22T03:47:24.513 に答える