ホームページ >バックエンド開発 >PHPチュートリアル >Facebook Connectを使用してユーザーを認証する

Facebook Connectを使用してユーザーを認証する

WBOY
WBOYオリジナル
2023-08-29 13:41:011274ブラウズ

最近、遅延登録について多くの議論が行われています。ユーザーが考える必要が少ないほど、コンバージョン率が高くなることが証明されています。何て素晴らしいアイデアなんだ!誰もが Facebook プロフィールを持っているようであれば、ワンクリックのユーザー登録を追加してみてはいかがでしょうか。今日はその方法を紹介します。


###ステップ1。 ### 設定### MySQL テーブル

まずデータベーステーブルを作成しましょう。

リーリー

非常に簡単です。ID、ユーザー名、姓名、ユーザーの写真の URL、および登録日を含むユーザー情報テーブルを設定します。さらに、さまざまなサードパーティのオープン認証プロトコルとその識別子を区別するために、

oauth_provider

フィールドと

oauth_uid フィールドを追加しました。たとえば、来週、Twitter ユーザーに参加を依頼するのが良いと考えたとします。これは簡単です。oauthprovider に別の値を設定し、oauthuid 値の重複を避けるだけです。 Facebook アプリ

新しいアプリケーションを作成することから始めましょう。名前を付けて利用規約に同意します。次に、以下に示すように、[Basic] タブで

API Key

Secret を取得します。 [キャンバス] タブで、

キャンバス URL使用 Facebook Connect 验证用户身份

Post-Authorization Redirect URL をローカルホストとスクリプトが処理するパスに設定します (http: // と同様) localhost.com/login_facebook.php?。末尾の疑問符とドメインに注意してください。Facebook では両方とも必須です。 hosts ファイルを有効なドメイン名に設定するだけです。 [接続] タブで、接続 URL をベース ドメインと同じ値に設定し、

localhost.com使用 Facebook Connect 验证用户身份 (または使用しているもの) を設定します。

次に、クライアント ライブラリを保存してダウンロードし、

src使用 Facebook Connect 验证用户身份dir 内の

facebook.php をルート ディレクトリに作成された新しいディレクトリに抽出します。 ###ステップ2。 ###折り返し電話###

認証プロセスは 3 つのステップに分かれています:

ローカル スクリプトはユーザーの許可を要求する URL を生成します

Facebook は、GET パラメーターを使用して指定された Canvas URL を返します

セッションを認証するためのパラメータを取得します
  1. 登録してログインする前に、簡単なテストを行ってみましょう。
  2. リーリー
  3. 次に、
  4. http://localhost.com/login_facebook.php
  5. にアクセスして、何が起こるかを見てみましょう。 Facebook にリダイレクトされて許可を求められた場合、私たちは正しい方向に進んでいます。

ただし、2 つの問題がある可能性があります。 1 つ目: Facebook にリダイレクトされてもエラーが表示される場合は、構成に値が欠落している可能性があります。アプリケーションの設定に戻り、上記のように、[接続] タブと [キャンバス] タブをチェックして、これらのフィールドが OK であることを確認します。

「Uncaught CurlException: 60: SSL 証明書の問題。CA 証明書が OK であることを確認してください。」のようなエラーが表示される別の問題が発生する可能性があります。これは CURL 設定が原因で発生します。 facebook.php

を開き、makeRequest() メソッドを見つけて、関数内の次の行を見つける必要があります。 リーリー 使用 Facebook Connect 验证用户身份この後に次の内容を追加します:

リーリー

私はライブラリをハッキングするのが嫌いですが、別の方法をまだ見つけていません。さて、ユーザー登録に移りましょう。また、URL の GET パラメータに古いセッション キーがある場合、スクリプトがひどいエラーで終了してしまうため、try/catch ステートメントも追加しました。

ステップ 3.

登録と認証

次に、MySQL を使用します。コードをできるだけ短くして仕事を完了させたいので、データ クリーナーは実装しないことに注意してください。これを覚えておいてください: 常にデータをクリーンアップしてください。


まず、データベースに接続しましょう。

リーリー ここで、セッションがある場合に備えて、$session

条件を処理しましょう。

リーリー

他の OAuth プロバイダー (twitter、Google アカウント、Open ID など) を受け入れる場合は、データベースにクエリを実行して

oauth_provider

として

facebook を探していることに注意してください。 ) および oauth_uid

、これはプロバイダーによってユーザー アカウントに提供される識別子であるため、通常はこれが推奨されます。

oauth_provider フィールドを text フィールド タイプのままにすると、パフォーマンスが低下する可能性があります。したがって、最善のオプションは、ENUM タイプに設定することです。

これで、データベースからクエリされた値を含む

$result var が作成されました。次に、いくつかのセッションを追加しましょう。この行をスクリプトの先頭に追加します。 リーリー empty($result)

条件の後に、次を追加します:

if(!empty($user)){
    # ...

    if(empty($result)){
        # ...
    }

    # let's set session values
    $_SESSION['id'] = $result['id'];
    $_SESSION['oauth_uid'] = $result['oauth_uid'];
    $_SESSION['oauth_provider'] = $result['oauth_provider'];
    $_SESSION['username'] = $result['username'];
}

由于对已登录的用户进行身份验证没有什么意义,因此在 session_start() 行下方添加:

if(!empty($_SESSION)){
    header("Location: home.php");
}

在需要身份验证的脚本中,只需添加:

session_start();
if(!empty($_SESSION)){
    header("Location: login_facebook.php");
}

如果您想显示用户名,请将其作为数组访问。

echo 'Welcome ' . $_SESSION['username'];
# or..
echo 'Welcome ' . !empty($_SESSION) ? $_SESSION['username'] : 'guest';

第 4 步:其他方法

Facebook 拥有大量连接功能,但我发现以下四个最有用。

旧方法

我可能遗漏了一些东西,但 FQL 似乎比 Graph API 更灵活、更简单。幸运的是,Facebook 仍然允许开发人员使用它,尽管使用新库,它已经发生了一些变化。

如果您想要用户 ID、名字、姓氏、用户图片的平方缩略图、可用的最大用户图片以及他或她的性别,您可以使用 users.getInfo 方法。

    $uid = $facebook->getUser();
    $api_call = array(
        'method' => 'users.getinfo',
        'uids' => $uid,
        'fields' => 'uid, first_name, last_name, pic_square, pic_big, sex'
    );
    $users_getinfo = $facebook->api($api_call);

您可以检查 Users.getInfo 可用字段的完整列表。

使用 FQL 可以获得相同的结果。

    $uid = $facebook->getUser();
    $fql_query  =   array(
        'method' => 'fql.query',
        'query' => 'SELECT uid, first_name, last_name, pic_square, pic_big, sex FROM user WHERE uid = ' . $uid
    );
    $fql_info = $facebook->api($fql_query);

以下是可使用 FQL 访问的表的列表,以及表用户可用的字段。

扩展权限

Facebook 为应用程序提供与用户数据的某些交互 - 只要获得授权即可。在旧的 API 中,额外权限的授权仅适用于 Javascript SDK(尽管我不太确定)。借助新的 API,我们可以轻松地将用户重定向到 Facebook 中的授权对话框,并在访问被授予或拒绝后返回到我们的网站。

在以下示例中,我们将重定向用户以授权帖子状态更新、照片、视频和注释、用户的真实电子邮件地址、生日以及对照片和视频的访问权限。

$uid = $facebook->getUser();

# req_perms is a comma separated list of the permissions needed
$url = $facebook->getLoginUrl(array(
    'req_perms' => 'email,user_birthday,status_update,publish_stream,user_photos,user_videos'
));
header("Location: {$url} ");

这是权限的完整列表。请注意,您可以指定用户接受时要定向到的 url 以及用户拒绝时要重定向到的 url。这些数组元素的键分别是 nextcancel_url。这是一个简单的示例:

$url = $facebook->getLoginUrl(array(
    'req_perms' => 'email',
    'next' => 'http://localhost.com/thanks.php',
    'cancel_url' => 'http://localhost.com/sorry.php'
));

如果未指定,则默认为请求脚本的位置。

使用 Facebook Connect 验证用户身份

检查扩展权限

由于用户可以轻松撤销权限,因此应用程序应始终在使用之前检查是否授予给定权限,特别是在发布某些内容时。我们将不得不使用旧版 API,因为新 API 似乎尚未完全实现它。

    $uid = $facebook->getUser();

    # users.hasAppPermission
    $api_call = array(
        'method' => 'users.hasAppPermission',
        'uid' => $uid,
        'ext_perm' => 'publish_stream'
    );
    $users_hasapppermission = $facebook->api($api_call);
    print_r($users_hasapppermission);

ext_perm 将仅支持旧的可用权限列表。

发布到墙上

验证用户是否具有 publish_stream 权限后,让我们在墙上发布一些内容。

    # let's check if the user has granted access to posting in the wall
    $api_call = array(
        'method' => 'users.hasAppPermission',
        'uid' => $uid,
        'ext_perm' => 'publish_stream'
    );
    $can_post = $facebook->api($api_call);
    if($can_post){
        # post it!
        $facebook->api('/'.$uid.'/feed', 'post', array('message' => 'Saying hello from my Facebook app!'));
        echo 'Posted!';
    } else {
        die('Permissions required!');
    }

本质上,我们使用 POST 方法(第二个参数)和一个数组作为要发送的数据的第三个参数,对 /<user_id>/feed</user_id> 进行 API 调用。在这种情况下,第三个参数支持 messagelinkpicturecaptionnamedescription。代码如下:

$facebook->api('/'.$uid.'/feed', 'post', array(
    'message' => 'The message',
    'name' => 'The name',
    'description' => 'The description',
    'caption' => 'The caption',
    'picture' => 'http://i.imgur.com/yx3q2.png',
    'link' => 'https://code.tutsplus.com
));

这是它的发布方式。

使用 Facebook Connect 验证用户身份

您应该了解的一些其他信息:

用户只需在他或她的墙上点击两次即可轻松撤销权限。您应该大量测试如果用户撤销对网站正常运行至关重要的一项或多项权限,或者即使应用程序被完全删除,可能会发生什么情况。这很重要。

  • 在“应用程序设置”中,您可以通过点击右侧的 x 来完全删除该应用程序。
  • 您可以在“授予的附加权限”部分中单独删除权限。

5。结论

虽然 Facebook 的身份验证功能确实很有用,但由于现在有很多人使用 Facebook,因此不建议将其用作网站中唯一的身份验证方法。那些没有 F​​acebook 帐户的人怎么办?他们不允许访问您的应用程序吗?感谢您的阅读!

以上がFacebook Connectを使用してユーザーを認証するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。