ホームページ >バックエンド開発 >PHPチュートリアル >Facebook Connectを使用してユーザーを認証する
最近、遅延登録について多くの議論が行われています。ユーザーが考える必要が少ないほど、コンバージョン率が高くなることが証明されています。何て素晴らしいアイデアなんだ!誰もが Facebook プロフィールを持っているようであれば、ワンクリックのユーザー登録を追加してみてはいかがでしょうか。今日はその方法を紹介します。
oauth_provider
フィールドとoauth_uid フィールドを追加しました。たとえば、来週、Twitter ユーザーに参加を依頼するのが良いと考えたとします。これは簡単です。oauth
provider に別の値を設定し、oauthuid 値の重複を避けるだけです。
Facebook アプリ
Secret を取得します。 [キャンバス] タブで、
キャンバス URL とPost-Authorization Redirect URL をローカルホストとスクリプトが処理するパスに設定します (http: // と同様) localhost.com/login_facebook.php?。末尾の疑問符とドメインに注意してください。Facebook では両方とも必須です。 hosts ファイルを有効なドメイン名に設定するだけです。
[接続] タブで、接続 URL をベース ドメインと同じ値に設定し、
次に、クライアント ライブラリを保存してダウンロードし、
facebook.php をルート ディレクトリに作成された新しいディレクトリに抽出します。
###ステップ2。 ###折り返し電話###
セッションを認証するためのパラメータを取得します
ただし、2 つの問題がある可能性があります。 1 つ目: Facebook にリダイレクトされてもエラーが表示される場合は、構成に値が欠落している可能性があります。アプリケーションの設定に戻り、上記のように、[接続] タブと [キャンバス] タブをチェックして、これらのフィールドが OK であることを確認します。
「Uncaught CurlException: 60: SSL 証明書の問題。CA 証明書が OK であることを確認してください。」のようなエラーが表示される別の問題が発生する可能性があります。これは CURL 設定が原因で発生します。
facebook.php
リーリー
私はライブラリをハッキングするのが嫌いですが、別の方法をまだ見つけていません。さて、ユーザー登録に移りましょう。また、URL の GET パラメータに古いセッション キーがある場合、スクリプトがひどいエラーで終了してしまうため、try/catch ステートメントも追加しました。
登録と認証
次に、MySQL を使用します。コードをできるだけ短くして仕事を完了させたいので、データ クリーナーは実装しないことに注意してください。これを覚えておいてください: 常にデータをクリーンアップしてください。
リーリー
他の 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';
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。这些数组元素的键分别是 next
和 cancel_url
。这是一个简单的示例:
$url = $facebook->getLoginUrl(array( 'req_perms' => 'email', 'next' => 'http://localhost.com/thanks.php', 'cancel_url' => 'http://localhost.com/sorry.php' ));
如果未指定,则默认为请求脚本的位置。
由于用户可以轻松撤销权限,因此应用程序应始终在使用之前检查是否授予给定权限,特别是在发布某些内容时。我们将不得不使用旧版 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 调用。在这种情况下,第三个参数支持 message
、link
、picture
、caption
、name
和 description
。代码如下:
$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 的身份验证功能确实很有用,但由于现在有很多人使用 Facebook,因此不建议将其用作网站中唯一的身份验证方法。那些没有 Facebook 帐户的人怎么办?他们不允许访问您的应用程序吗?感谢您的阅读!
以上がFacebook Connectを使用してユーザーを認証するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。