6

Facebook ログインを既存のログイン システムに追加したい。

短縮版

ユーザーが facebook にログインしているかどうかを確認します。ユーザーがログインしている場合は、ユーザー ID を取得し、アカウントに接続されているかどうかを確認します。その場合、データを取得してセッション変数を保存し、ユーザーがログインします。

ロングバージョン

登録方法

  1. ユーザーがサインアップをクリックすると、サインアップと Facebook でサインアップする 2 つのオプションがあるページが表示されます。

  2. ユーザーが Facebook でサインアップすることを選択した場合、一部の情報 (電子メールなど) が自動入力され、ユーザーはパスワードとニックネームを入力する必要があります。次に、情報を検証し、有効な場合はユーザー + facebook ユーザー ID を保存します。ユーザーがサインアップを選択した場合、自動入力は行われず、もちろん facebook ユーザー ID は保存されません。

ユーザーがログインしているかどうかを確認する方法:

  1. ユーザーがログインしている場合は、セッション変数が設定されているかどうかを確認します。そうでない場合は、手順 2 に進みます。

  2. Remember me コードを含む Cookie が存在するかどうかを確認します。存在する場合は、コードが有効かどうかを確認し、ユーザーがログイン中であることを確認します。Cookie が存在しない場合は、手順 3 に進みます。

  3. ユーザーが facebook にログインしているかどうかを確認します。ユーザーがユーザー ID を取得し、データベースの行と一致するかどうかを確認します。一致する場合は、セッション変数を保存し、ユーザーがログインしています。そうでない場合は、ログインを表示します。形。

Facebook のユーザー ID を取得するには、次のコードを使用します。

<?php
require_once("facebook.php");

$config = array();
$config['appId'] = 'app id';
$config['secret'] = 'secret app id';
$facebook = new Facebook($config);

$uid = $facebook->getUser();
?>

質問

  1. これは正しく安全な方法ですか?
  2. そうでない場合は、正しい方向に私を向けることができますか?
  3. ユーザー ID を取得する前に、ユーザーは私のアプリを許可する必要がありますよね?
  4. 上記のコードは localhost では機能しますが、私のサーバーでは機能しません。毎回 0 を返します。解決?

前もって感謝します!

4

2 に答える 2

5

回答: 1. あなたは正しい道を進んでいると思います。ログインした [ネイティブ ユーザー] がサインアップ ページにアクセスし、FB アカウントの参加をユーザー プロファイル ページなどにプッシュできるようにすることもできます。

  1. 登録されているすべてのアカウントに対して Facebook によって提供される公開情報であるため、ユーザー ID を簡単に取得できます。ただし、そのユーザーは、Facebook プロファイルから情報を取得できるようにするために、アプリを許可する必要があります。しかし、幸いなことに、ほとんどすべての作業は facebook によって行われ、ユーザーを正しい URL に誘導するだけで済みます。Facebook登録ソーシャルプラグインを使用して、サイト/アプリにユーザーを登録できるソーシャルプラグインもあります

facebook api のドキュメントに記載されているように、$uid[サイトを閲覧している] 現在のユーザーの facebook ユーザー ID が含まれるか、呼び出し後に null が含まれます。$uid = $facebook->getUser();

最初に、$uid が有効であることを確認できます [null またはゼロではない]。次に、そのテストに合格した場合は、$user = $facebook->api('/me'). すでに Facebook にログインしている場合は、ユーザー プロファイルが提供されます。そうでない場合、ユーザーはおそらく Facebook アカウントを持っていますが、ログインしていません。

適切なトークンが渡されなかった場合、api('/me') は例外をスローする可能性があることに注意してください。そのため、それを try-catch ブロックでラップし、アプリに従って例外を処理する必要があります。 app_id とシークレット ID が有効であることが確実な場合]

$user が null の場合、ユーザーを呼び出し$loginUrl = $facebook->getLoginUrl()てリダイレクトするか、URL へのクリック可能なリンクを提供することで、ユーザーを [for facebook login] にリダイレクトするための URL を取得できます。

これらはすべてfacebook api documentationに記載されています

サンプルコード:

<?php
require_once("facebook.php");

$config = array();
$config['appId'] = 'app id';
$config['secret'] = 'secret app id';
$facebook = new Facebook($config);

$uid = $facebook->getUser();

if( ! $uid){ // we have an id

    try{
        $user = $facebook->api('/me'); //get the current user's FB public profile
        if($user){ // we have a valid user who is logged in to his facebook account
            $logoutURL = $facebook->getLogoutUrl(); // user 
         }
    }catch(FacebookApiException $e){
        $user = null;
        $loginURL = $facebook->getLoginUrl();
    }
}

繰り返しますが、これらはすべて facebook PHP クライアントで文書化されているため、開始するのに最適な選択です。Facebook はあまり通知せずに API を変更するため、コードの動作がおかしくなり始めた場合に備えて、開発者ページにアクセスする必要があります。

それが役に立てば幸い!

于 2012-04-13T01:53:36.110 に答える
1

回答 1: 正しい方法です。回答 2: php sdk を使用します。これには、fb ログインを保護するためのすべてが既に含まれています。回答 3: はい。ユーザー ID を許可する前に、ユーザーはアプリを許可する必要があります。回答 4: Facebook でアプリを作成しておらず、デモ ファイルのコードを使用していない可能性があります。デモ ファイルは、サイト URL が のアプリにリンクされていますlocalhost。したがって、これを修正するには、Facebook でアプリを作成し、サイトの URL (サーバーの URL) を指定します。その後、動作するはずです:)

その他の質問は大歓迎です:)

于 2012-04-13T02:12:16.733 に答える