ホームページ >バックエンド開発 >PHPチュートリアル >Hybridauthを使用したPHPのソーシャルログイン
多くの最新のWebサイトでは、ユーザーがソーシャルネットワークアカウントを介してログインできます。たとえば、SitePointコミュニティにより、ユーザーは新しいアカウントに登録せずにFacebook、Twitter、Google、Yahoo、またはGitHubアカウントでログインできます。
Hybridauthは、アプリケーションとさまざまなソーシャルAPIおよびIDプロバイダーの間の抽象的なAPIとして機能します。
キーポイント
インストール ハイブリダースをインストールするには、
作曲家をお勧めします。また、サンプルアプリケーションの基礎としてSlimを使用します。
<code>{ "require": { "slim/slim": "2.*", "hybridauth/hybridauth": "2.3.0" } }</code>
Hybridauth Hybridauthを使用するには、プロジェクトルートフォルダーにフォルダーに
と(Hybridauth Endpointファイル)をコピーします。 /vendor/hybridauth/hybridauth/hybridauth
config.php
デモアプリケーションロジックのSlim Frameworkで使用されるため、index.php
ファイルを
index.php
アプリ(Facebook、Twitterアプリなど)の資格情報でhybrid.php
ファイルを入力します。 index.php
です。 config.php
注:
<code>return [ "base_url" => "http://slim.local/", "providers" => [ "Google" => [ "enabled" => true, "keys" => [ "id" => "", "secret" => "" ], ], "Facebook" => [ "enabled" => true, "keys" => [ "id" => "", "secret" => "" ], "trustForwarded" => false ], "Twitter" => [ "enabled" => true, "keys" => [ "key" => "", "secret" => "" ] ], ], "debug_mode" => true, "debug_file" => "bug.txt", ];</code>
次に、ベンダーのオートローダーをロードし、クラスをインスタンス化します。 base_url
hybrid.php
メソッドを使用して、指定されたプロバイダーを使用してユーザーを認証します。
Facebookの場合:Twitterの場合:
<code>require 'vendor/autoload.php'; $hybridauth = new Hybrid_Auth( 'config.php' );</code>
Googleの場合:authenticate
に渡されたパラメーターは、
ファイルのプロバイダー配列キーと一致する必要があります。<code>$adapter = $hybridauth->authenticate( "Facebook" );</code>認証後、
メソッドを使用して、ユーザーのプロファイルデータを取得します。 getUserProfile()
<code>{ "require": { "slim/slim": "2.*", "hybridauth/hybridauth": "2.3.0" } }</code>
変数は、返されたユーザープロファイルデータを含むオブジェクトになります。 $user_profile
はそのPHPクラスの名前です。 GitHub.php
vendor/hybridauth/hybridauth/additional-providers/hybridauth-github/Providers
以下に示すように、path
ハイブリダースの方法を使用してGitHubを使用してユーザーを認証します。
class
<code>return [ "base_url" => "http://slim.local/", "providers" => [ "Google" => [ "enabled" => true, "keys" => [ "id" => "", "secret" => "" ], ], "Facebook" => [ "enabled" => true, "keys" => [ "id" => "", "secret" => "" ], "trustForwarded" => false ], "Twitter" => [ "enabled" => true, "keys" => [ "key" => "", "secret" => "" ] ], ], "debug_mode" => true, "debug_file" => "bug.txt", ];</code>ソーシャルログインの実装
authenticate()
<code>require 'vendor/autoload.php'; $hybridauth = new Hybrid_Auth( 'config.php' );</code>このプラクティスに反対する理由の1つは、たとえば、Twitterがそれを通して認証されているユーザーのメールアドレスを返さないことです。つまり、返されたプロファイルデータにはユーザーのメールが含まれていません。
すべてではないにしても、Facebook、Twitter、Google、LinkedIn、さらにはGitHubなどのソーシャルプロバイダーのほとんどは、承認後に一意のユーザーID番号を返します。 ユーザーのメールを使用してユーザーのアカウントにログインしませんが、以下に示すように、ソーシャルプロバイダーによって返される識別子を使用します。ユーザーがアカウントを持っていない場合は、ユーザーアカウントを作成しますアカウントはウェブサイトにアクセスしてください。
デモアプリケーションの作成 ハイブリダースとスリムなフレームワークがインストールされていると思います。それ以外の場合は、上記のインストールガイドを参照してください。アプリケーション構造
これは、データベーステーブルのSQLです。
アプリケーションモデルの書き込みアプリケーションモデルのすべてのコードは、SRCフォルダーのapp_model.phpファイルに配置する必要があります。
ファイル名空間はモデルで、その後にクラスの定義とコンストラクターが続きます。
<code>$adapter = $hybridauth->authenticate( "Facebook" );</code>
メソッドは、識別子(ユーザー識別番号)がデータベースに既に存在する場合にtrueを返し、それ以外の場合はfalseを返します。
<code>$adapter = $hybridauth->authenticate( "Twitter" );</code>メソッドユーザープロファイルデータをデータベースに挿入します。
メソッドは、作成された(プロバイダーがユーザーを正常に承認した後に作成された後に作成されたときに、作成されたユーザーセッションをHybridauthセッションに追加します。
<code>$adapter = $hybridauth->authenticate( "Google" );</code>
ログアウトリンクをクリックするときに、identifier_exists
<code>$user_profile = $adapter->getUserProfile();</code>
register_user
最後に、Getterメソッドはユーザーの名前、電子メール、およびアバターURLを返します。
<code>{ "require": { "slim/slim": "2.*", "hybridauth/hybridauth": "2.3.0" } }</code>
次のコードをComposer.jsonファイルに追加して、モデルクラスのPSR-4オートローダーを登録します。
<code>return [ "base_url" => "http://slim.local/", "providers" => [ "Google" => [ "enabled" => true, "keys" => [ "id" => "", "secret" => "" ], ], "Facebook" => [ "enabled" => true, "keys" => [ "id" => "", "secret" => "" ], "trustForwarded" => false ], "Twitter" => [ "enabled" => true, "keys" => [ "key" => "", "secret" => "" ] ], ], "debug_mode" => true, "debug_file" => "bug.txt", ];</code>
実行composer dump-autoload
vendor/autoload.php
ファイルを再生します。
ファイルはファイルを自動的にロードし、スリムにインスタンス化します。 index.php
<code>require 'vendor/autoload.php'; $hybridauth = new Hybrid_Auth( 'config.php' );</code>すべてのテンプレートファイルを保存するテンプレートというディレクトリを作成し、次のようにスリムで登録または構成します。
呼び出されたときにデータベース接続インスタンスを返すスリムデータベースSingletonリソースを作成します。
<code>$adapter = $hybridauth->authenticate( "Facebook" );</code>
Hybridauthインスタンスを返す別のSingletonリソースも作成されます。
<code>$adapter = $hybridauth->authenticate( "Twitter" );</code>
データベース接続をパラメーターとして渡すことにより、アプリケーションモデルクラスをインスタンス化します。
<code>$adapter = $hybridauth->authenticate( "Google" );</code>
ルートのパラメーターとして追加された場合、次の
<code>$user_profile = $adapter->getUserProfile();</code>関数ユーザーがログインしていない場合、ログインページにリダイレクトします。
authenticate
<code>"Github" => [ "enabled" => true, "keys" => [ "id" => "", "secret" => "" ], "wrapper" => [ "path" => "providers/GitHub.php", "class" => "Hybrid_Providers_GitHub" ] ]</code>
以下は、ソーシャルログインリンクのルーティング定義です。つまり、リンクがクリックされると、Hybridauthは認可のためにユーザーをFacebookにリダイレクトします。同じことがTwitter
<code>$adapter = $hybridauth->authenticate( "Github" );</code>、Google
、および他のすべてのサポートされているプロバイダーにも当てはまります。 http://slim.local/login/facebook
http://slim.local/login/twitter
http://slim.local/login/google
<code>|-scr/ |----App_Model.php |-templates/ |----login.php |----welcome.php |-vendor/ |-composer.json |-config.php |-hybrid.php |-index.php |-.htaccess</code>Hybridauthの方法を呼び出すと、ユーザーを特定のソーシャルプロバイダーにリダイレクトします。
authenticate()
承認が成功した後、
$user_profile
identifier_exists()
これは、ルートをログアウトするためのコードです。
モデルクラスで説明した
<code class="language-sql">CREATE TABLE IF NOT EXISTS `users` ( `id` int(10) NOT NULL AUTO_INCREMENT, PRIMARY KEY (id), `identifier` varchar(50) NOT NULL, UNIQUE KEY `identifier` (`identifier`), `email` varchar(50) DEFAULT NULL, `first_name` varchar(20) DEFAULT NULL, `last_name` varchar(20) DEFAULT NULL, `avatar_url` varchar(255) ) ENGINE=InnoDB;</code>メソッドは、ユーザーセッションを破壊し、ユーザーの接続プロバイダーからログアウトするために呼び出されます。
ログイン後にユーザーがリダイレクトされたウェルカムページのルート:logout_user
Hybrid_Auth::logoutAllProviders()
<code class="language-php"><?php namespace Model; class App_Model { /** @var object Database connection */ private $conn; /** * Instantiate the model class. * * @param object $db_connection DB connection */ public function __construct(\PDO $db_connection) { $this->conn = $db_connection; } // ... rest of the methods ... }</code>完全なソースコードについては、アプリケーションのGitHubリポジトリを参照してください。
<code class="language-php">/** * Check if a HybridAuth identifier already exists in DB * * @param int $identifier * * @return bool */ public function identifier_exists($identifier) { try { $sql = 'SELECT identifier FROM users'; $query = $this->conn->query($sql); $result = $query->fetchAll(\PDO::FETCH_COLUMN, 0); return in_array($identifier, $result); } catch ( \PDOException $e ) { die( $e->getMessage() ); } }</code>結論 この記事では、ソーシャルログイン機能を強力で堅牢なHybridauth PHPライブラリを使用してWebサイトと統合する方法を学びました。
質問や貢献がある場合は、コメントでお知らせください。 PHPおよびHybridauthを使用したソーシャルログイン用の
faq(faq)
Hybridauthは、人気のあるオープンソースソーシャルログインPHPライブラリです。これにより、Web開発者は、ソーシャルメディアアカウントを介してユーザーを認証する簡単な方法を提供することにより、ソーシャルアプリケーションを簡単に構築できます。 Hybridauthは、アプリケーションとさまざまなソーシャルAPIとFacebook、Twitter、Googleなどのアイデンティティプロバイダーの間の抽象的なAPIとして機能します。 PHPアプリケーションで既存のログインシステムと統合し、ソーシャルログイン機能を追加することで機能します。
Hybridauthは、Composer(PHPの依存管理ツール)を介してインストールできます。インストール後、使用するプロバイダー(ソーシャルネットワーク)を設定して構成する必要があります。各プロバイダーには、キーやキーなどの一意のパラメーターセットが必要であり、各ソーシャルネットワークの開発者プラットフォームでアプリケーションを作成することで取得できます。
Hybridauthは、オープンアクセスデリゲート標準であるOauthを使用するため、非常に安全です。 OAUTHは、安全な指定されたアクセスを提供します。つまり、ユーザーはパスワードを提供せずに他のWebサイトで情報にアクセスするためのWebサイトに許可を与えることができます。これにより、Hybridauthはソーシャルログインの安全なオプションになります。
はい、Hybridauthは複数のWebサイトで使用できます。 Webサイトごとに正しいコールバックURL構成ライブラリを使用するだけです。これにより、複数のWebサイトを管理する開発者にとって柔軟なソリューションになります。
Hybridauthには、エラー処理システムが組み込まれています。エラーが発生すると、アプリケーションのエラー処理ポリシーに基づいてキャッチおよび処理できる例外がスローされます。これにより、デバッグと修正の問題が簡単になります。
はい、ソーシャルログインボタンの外観とスタイルをカスタマイズできます。 Hybridauthはソーシャルログイン機能を提供しますが、ボタンの設計とレイアウトは完全にあなた次第です。
Hybridauthの更新は、Composerでコマンドを実行するのと同じくらい簡単です。これにより、すべてのセキュリティパッチと更新を備えた最新バージョンが常にあります。
はい、ハイブリダースはフレームワークではなく、PHPフレームワークで使用できます。これにより、さまざまなPHPフレームワークを使用して開発者にとって多用途の選択肢になります。
いいえ、ハイブリダースはソーシャルログイン用に設計されています。従来の電子メールおよびパスワード認証の場合、他のPHPライブラリを使用するか、独自の認証システムを構築する必要があります。
出力は、元の意味を保存しながら、元の画像のフォーマットと再編成を維持します
以上がHybridauthを使用したPHPのソーシャルログインの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。