ホームページ >バックエンド開発 >PHPチュートリアル >Hybridauthを使用したPHPのソーシャルログイン

Hybridauthを使用したPHPのソーシャルログイン

Joseph Gordon-Levitt
Joseph Gordon-Levittオリジナル
2025-02-18 11:26:10556ブラウズ

多くの最新のWebサイトでは、ユーザーがソーシャルネットワークアカウントを介してログインできます。たとえば、SitePointコミュニティにより、ユーザーは新しいアカウントに登録せずにFacebook、Twitter、Google、Yahoo、またはGitHubアカウントでログインできます。

Social Logins in PHP with HybridAuth

このチュートリアルでは、ソーシャルログイン機能の構築を簡素化するPHPライブラリであるHybridauthを紹介します。

Hybridauthは、アプリケーションとさまざまなソーシャルAPIおよびIDプロバイダーの間の抽象的なAPIとして機能します。

キーポイント

    Hybridauthは、ソーシャルログインのWebサイトへの統合を簡素化し、アプリケーションとさまざまなソーシャルAPIの間の中間層として機能するように設計されたPHPライブラリです。
  • Facebook、Google、Twitterなどの各ソーシャルネットワークに適切に機能するには、Hybridauthをコンポーザーからインストールすることをお勧めします。
  • このライブラリは、SECUREアクセスのためにOAUTHを使用して、認証中にユーザーの資格情報が保護されるようにします。
  • Hybridauthを使用すると、電子メールやユーザー名に依存するのではなく、ソーシャルネットワークが提供する一意の識別子を使用して、カスタムユーザー認証プロセスを許可します。
  • このチュートリアルは、スリムPHPフレームワークを使用した実用的なデモを提供し、環境のセットアップからユーザー登録、ログイン、ソーシャルネットワークを介したログアウトを処理する完全に機能するデモアプリケーションの作成までの手順を詳述します。

インストール ハイブリダースをインストールするには、

作曲家をお勧めします。また、サンプルアプリケーションの基礎として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

たとえば、ユーザーがFacebook、Google、Twitterを介してWebサイトにログインしたい場合。私のアプリケーションURLは

です。 config.php

注:http://slim.localパラメーターは、この場合はハイブリダースエンドポイントファイルを指す必要があります。

詳細については、Hybridauth Configurationドキュメントを参照してください。
<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

その他のソーシャルプロバイダー

Githubなどのプロバイダーを追加するには、ファイルをからアプリケーションの場所(この場合はプロバイダーディレクトリ)にコピーします。プロバイダーラッパーを使用してファイルをロードします。ここで、

はgithubファイルへのパスであり、

はその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()

通常、ログインと登録システムを備えたすべてのWebサイトでは、ユーザーのメールアドレスまたはユーザー名を使用して、アカウントに識別およびログインします。ソーシャルログインを実装する予定がある場合は、認証のためにユーザーのユーザー名または電子メールを使用しないことをお勧めします。
<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-autoloadvendor/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

メソッドを呼び出して、ユーザー識別子がデータベースに存在するかどうかを確認します。本当なら、ユーザーはWebサイトにログインします。それ以外の場合、ユーザー用にアカウントが作成され、ユーザーがログインします。

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)

ハイブリダースとは何ですか?ソーシャルログインのPHPでどのように使用されていますか?

Hybridauthは、人気のあるオープンソースソーシャルログインPHPライブラリです。これにより、Web開発者は、ソーシャルメディアアカウントを介してユーザーを認証する簡単な方法を提供することにより、ソーシャルアプリケーションを簡単に構築できます。 Hybridauthは、アプリケーションとさまざまなソーシャルAPIとFacebook、Twitter、Googleなどのアイデンティティプロバイダーの間の抽象的なAPIとして機能します。 PHPアプリケーションで既存のログインシステムと統合し、ソーシャルログイン機能を追加することで機能します。

PHPアプリケーションにHybridauthをインストールして構成する方法は?

Hybridauthは、Composer(PHPの依存管理ツール)を介してインストールできます。インストール後、使用するプロバイダー(ソーシャルネットワーク)を設定して構成する必要があります。各プロバイダーには、キーやキーなどの一意のパラメーターセットが必要であり、各ソーシャルネットワークの開発者プラットフォームでアプリケーションを作成することで取得できます。

ソーシャルログインのハイブリダースのセキュリティレベルは何ですか?

Hybridauthは、オープンアクセスデリゲート標準であるOauthを使用するため、非常に安全です。 OAUTHは、安全な指定されたアクセスを提供します。つまり、ユーザーはパスワードを提供せずに他のWebサイトで情報にアクセスするためのWebサイトに許可を与えることができます。これにより、Hybridauthはソーシャルログインの安全なオプションになります。

複数のWebサイトでソーシャルログインにHybridauthを使用できますか?

はい、Hybridauthは複数のWebサイトで使用できます。 Webサイトごとに正しいコールバックURL構成ライブラリを使用するだけです。これにより、複数のWebサイトを管理する開発者にとって柔軟なソリューションになります。

ハイブリダースのエラーに対処する方法は?

Hybridauthには、エラー処理システムが組み込まれています。エラーが発生すると、アプリケーションのエラー処理ポリシーに基づいてキャッチおよび処理できる例外がスローされます。これにより、デバッグと修正の問題が簡単になります。

ハイブリダースのソーシャルログインボタンの外観とスタイルをカスタマイズできますか?

はい、ソーシャルログインボタンの外観とスタイルをカスタマイズできます。 Hybridauthはソーシャルログイン機能を提供しますが、ボタンの設計とレイアウトは完全にあなた次第です。

PHPアプリケーションでHybridauthライブラリを更新する方法は?

Hybridauthの更新は、Composerでコマンドを実行するのと同じくらい簡単です。これにより、すべてのセキュリティパッチと更新を備えた最新バージョンが常にあります。

他のPHPフレームワークでHybridauthを使用できますか?

はい、ハイブリダースはフレームワークではなく、PHPフレームワークで使用できます。これにより、さまざまなPHPフレームワークを使用して開発者にとって多用途の選択肢になります。

私のローカル開発環境でHybridauthのソーシャルログインをテストする方法は?

ソーシャルネットワークには有効なコールバックURLが必要なため、ソーシャルログインをローカルでテストするのは難しい場合があります。ただし、ngrokなどのツールを使用してローカルサーバーをインターネットに公開し、そのURLをコールバックURLとして使用できます。

Hybridauthを使用して、電子メールやパスワードなどの非社会的アカウントでユーザーを認証できますか?

いいえ、ハイブリダースはソーシャルログイン用に設計されています。従来の電子メールおよびパスワード認証の場合、他のPHPライブラリを使用するか、独自の認証システムを構築する必要があります。

出力は、元の意味を保存しながら、元の画像のフォーマットと再編成を維持します

以上がHybridauthを使用したPHPのソーシャルログインの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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