首頁 > 後端開發 > php教程 > 與Hybridauth的PHP中的社交登錄

與Hybridauth的PHP中的社交登錄

Joseph Gordon-Levitt
發布: 2025-02-18 11:26:10
原創
557 人瀏覽過

許多現代網站都允許用戶通過其社交網絡帳戶登錄。例如,SitePoint 社區允許用戶使用其 Facebook、Twitter、Google、Yahoo 或 GitHub 帳戶登錄,無需註冊新帳戶。

Social Logins in PHP with HybridAuth

本教程將介紹 HybridAuth —— 一個簡化社交登錄功能構建的 PHP 庫。

HybridAuth 充當應用程序與各種社交 API 和身份提供商之間的抽象 API。

關鍵要點

  • HybridAuth 是一個 PHP 庫,旨在簡化社交登錄集成到您的網站中,充當您的應用程序與各種社交 API 之間的中間層。
  • 建議通過 Composer 安裝 HybridAuth,並且需要為每個社交網絡(如 Facebook、Google 和 Twitter)配置特定的憑據才能正常運行。
  • 該庫使用 OAuth 進行安全訪問,確保在身份驗證過程中保護用戶憑據。
  • HybridAuth 允許自定義用戶身份驗證過程,不依賴於電子郵件或用戶名,而是使用社交網絡提供的唯一標識符。
  • 本教程提供了一個使用 Slim PHP 框架的實際演示,詳細介紹了從設置環境到編寫功能齊全的演示應用程序的步驟,該應用程序通過社交網絡處理用戶註冊、登錄和註銷。

安裝

推薦使用 Composer 安裝 HybridAuth。我們還將使用 Slim 作為示例應用程序的基礎。

<code>{
    "require": {
        "slim/slim": "2.*",
        "hybridauth/hybridauth": "2.3.0"
    }
}</code>
登入後複製
登入後複製
登入後複製

使用 HybridAuth 進行社交登錄

要使用 HybridAuth,請將 /vendor/hybridauth/hybridauth/hybridauth 文件夾中的 config.phpindex.php (HybridAuth 端點文件) 複製到您的項目根文件夾。

index.php 文件重命名為 hybrid.php,因為 index.php 將由 Slim 框架用於我們的演示應用程序邏輯。

使用您的應用程序(例如 Facebook、Twitter 應用程序)憑據填充 config.php 文件。

例如,如果您希望用戶通過 Facebook、Google 和 Twitter 登錄您的網站;您的配置文件看起來應該像這樣。我的應用程序 URL 是 http://slim.local

<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 參數必須指向 HybridAuth 端點文件,在本例中為 hybrid.php

有關更多信息,請參閱 HybridAuth 配置文檔。

接下來,加載 vendor 自動加載器並實例化類。

<code>require 'vendor/autoload.php';
$hybridauth = new Hybrid_Auth( 'config.php' );</code>
登入後複製
登入後複製
登入後複製

使用 authenticate 方法使用給定的提供程序對用戶進行身份驗證。

對於 Facebook:

<code>$adapter = $hybridauth->authenticate( "Facebook" );</code>
登入後複製
登入後複製
登入後複製

對於 Twitter:

<code>$adapter = $hybridauth->authenticate( "Twitter" );</code>
登入後複製
登入後複製
登入後複製

對於 Google:

<code>$adapter = $hybridauth->authenticate( "Google" );</code>
登入後複製
登入後複製
登入後複製

傳遞給 authenticate() 的參數必須與 config.php 文件中的提供程序數組鍵匹配。

身份驗證後,使用 getUserProfile() 方法檢索用戶的個人資料數據。

<code>{
    "require": {
        "slim/slim": "2.*",
        "hybridauth/hybridauth": "2.3.0"
    }
}</code>
登入後複製
登入後複製
登入後複製

$user_profile 變量將是一個對象,其中包含返回的用戶個人資料數據。

更多社交提供商

要向現有提供商添加更多提供商,例如 GitHub,請將 GitHub.php 文件從 vendor/hybridauth/hybridauth/additional-providers/hybridauth-github/Providers 複製到應用程序中的某個位置(在本例中為提供程序目錄)。使用提供程序包裝器加載文件,其中 path 是 GitHub 文件的路徑,class 是其 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>
登入後複製
登入後複製
登入後複製

使用 HybridAuth 的 authenticate() 方法使用 GitHub 對用戶進行身份驗證,如下所示:

<code>require 'vendor/autoload.php';
$hybridauth = new Hybrid_Auth( 'config.php' );</code>
登入後複製
登入後複製
登入後複製

社交登錄實現

通常,每個具有登錄和註冊系統的網站都使用用戶的電子郵件地址或用戶名來識別和登錄其帳戶。如果您打算實現社交登錄功能,建議不要使用用戶的用戶名或電子郵件進行身份驗證。

反對這種做法的一個原因是,例如,Twitter 不會返回通過其身份驗證的用戶電子郵件地址。也就是說,返回的個人資料數據不包含用戶的電子郵件。

大多數(如果不是全部)社交提供商,如 Facebook、Twitter、Google、LinkedIn 甚至 GitHub,在授權後都會返回唯一的用戶標識號。

不要使用用戶的電子郵件將其登錄到其帳戶,而是使用社交提供商返回的標識符,如下所示:如果用戶沒有帳戶,則創建用戶帳戶;如果用戶有帳戶,則將其登錄到網站。

編寫演示應用程序

我們將使用 Slim PHP 框架構建一個簡單的 Web 應用程序,以演示如何實現使用 HybridAuth 進行社交登錄的實際示例。

我假設您已安裝 HybridAuth 和 Slim 框架。否則,請參閱上面的安裝指南。

應用程序結構

<code>$adapter = $hybridauth->authenticate( "Facebook" );</code>
登入後複製
登入後複製
登入後複製

這是數據庫表的 SQL。

<code>$adapter = $hybridauth->authenticate( "Twitter" );</code>
登入後複製
登入後複製
登入後複製

編寫應用程序模型

應用程序模型的所有代碼都應放在 src 文件夾中的 App_Model.php 文件中。

該文件命名空間為 Model,後跟類定義和構造函數。

<code>$adapter = $hybridauth->authenticate( "Google" );</code>
登入後複製
登入後複製
登入後複製

identifier_exists 方法如果標識符(用戶標識號)已存在於數據庫中則返回 true,否則返回 false。

<code>$user_profile = $adapter->getUserProfile();</code>
登入後複製
登入後複製

register_user 方法將用戶個人資料數據插入數據庫。

<code>"Github"   => [
    "enabled" => true,
    "keys"    => [
        "id"     => "",
        "secret" => ""
    ],
    "wrapper" => [ "path" => "providers/GitHub.php", "class" => "Hybrid_Providers_GitHub" ]
]</code>
登入後複製
登入後複製

login_user 方法在調用時,將創建的用戶會話添加到 HybridAuth 會話(在提供商成功授權用戶後創建)。

<code>$adapter = $hybridauth->authenticate( "Github" );</code>
登入後複製
登入後複製

logout_user 方法在單擊註銷鏈接時刪除或銷毀用戶的會話。

<code>|-scr/
|----App_Model.php
|-templates/
|----login.php
|----welcome.php
|-vendor/
|-composer.json
|-config.php
|-hybrid.php
|-index.php
|-.htaccess</code>
登入後複製
登入後複製

最後,getter 方法返回用戶的姓名、電子郵件和頭像 URL。

<code>{
    "require": {
        "slim/slim": "2.*",
        "hybridauth/hybridauth": "2.3.0"
    }
}</code>
登入後複製
登入後複製
登入後複製

通過將以下代碼添加到您的 composer.json 文件中,為 Model 類註冊 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 文件中加載 composer 自動加載文件並實例化 Slim。

<code>require 'vendor/autoload.php';
$hybridauth = new Hybrid_Auth( 'config.php' );</code>
登入後複製
登入後複製
登入後複製

創建一個名為 templates 的目錄來存儲所有模板文件,然後在 Slim 中註冊或配置它,如下所示:

<code>$adapter = $hybridauth->authenticate( "Facebook" );</code>
登入後複製
登入後複製
登入後複製

創建一個 Slim 數據庫單例資源,該資源在調用時將返回數據庫連接實例。

<code>$adapter = $hybridauth->authenticate( "Twitter" );</code>
登入後複製
登入後複製
登入後複製

還創建了另一個返回 HybridAuth 實例的單例資源。

<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>
登入後複製
登入後複製

當註銷的用戶訪問應用程序主頁或索引頁面時,將其重定向到登錄頁面。

<code>$adapter = $hybridauth->authenticate( "Github" );</code>
登入後複製
登入後複製

以下是社交登錄鏈接的路由定義。即,當單擊鏈接 http://slim.local/login/facebook 時,HybridAuth 將用戶重定向到 Facebook 以進行授權。 Twitter http://slim.local/login/twitter、Google 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() 方法檢查用戶標識符是否在數據庫中存在。如果為真,則用戶登錄到網站。否則,將為用戶創建一個帳戶,然後用戶登錄。

這是註銷路由的代碼。

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;
登入後複製

我們已經在模型類中討論過的 logout_user 方法被調用以銷毀用戶會話,並且還調用 Hybrid_Auth::logoutAllProviders() 以將用戶註銷出連接的提供商。

用戶登錄後重定向到的歡迎頁面的路由:

<?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 ...
}
登入後複製

最後,運行 Slim 應用程序。

/**
     * 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() );
        }

    }
登入後複製

請參閱應用程序的 GitHub 存儲庫以獲取完整的源代碼。

結論

在本文中,我們學習瞭如何使用功能強大且健壯的 HybridAuth PHP 庫將社交登錄功能與網站集成。

如果您有任何疑問或貢獻,請在評論中告訴我們。

使用 PHP 和 HybridAuth 進行社交登錄的常見問題解答 (FAQ)

什麼是 HybridAuth,它如何與 PHP 一起用於社交登錄?

HybridAuth 是一個流行的開源社交登錄 PHP 庫。它允許 Web 開發人員輕鬆構建社交應用程序,方法是提供一種簡單的方法來通過用戶的社交媒體帳戶對其進行身份驗證。 HybridAuth 充當應用程序與各種社交 API 和身份提供商(如 Facebook、Twitter 和 Google)之間的抽象 API。它的工作原理是與 PHP 應用程序中現有的登錄系統集成,並添加社交登錄功能。

如何在我的 PHP 應用程序中安裝和配置 HybridAuth?

HybridAuth 可以通過 Composer(PHP 中的依賴項管理工具)安裝。安裝後,您需要通過設置要使用的提供商(社交網絡)來對其進行配置。每個提供商都需要一組唯一的參數,例如密鑰和密鑰,您可以通過在各個社交網絡的開發者平台上創建應用程序來獲得這些參數。

HybridAuth 用於社交登錄的安全級別如何?

HybridAuth 非常安全,因為它使用 OAuth(一種開放的訪問委託標準)。 OAuth 提供安全的指定訪問,這意味著用戶可以授予網站訪問其在其他網站上的信息的權限,而無需向其提供密碼。這使得 HybridAuth 成為實現社交登錄的安全選擇。

我可以在多個網站上使用 HybridAuth 進行社交登錄嗎?

是的,HybridAuth 可用於多個網站。您只需要使用每個網站的正確回調 URL 配置庫即可。這使得它成為管理多個網站的開發人員的靈活解決方案。

如何處理 HybridAuth 中的錯誤?

HybridAuth 具有內置的錯誤處理系統。發生錯誤時,它會拋出異常,您可以根據應用程序的錯誤處理策略捕獲和處理該異常。這使得調試和修復問題變得更容易。

我可以自定義 HybridAuth 的社交登錄按鈕的外觀和風格嗎?

是的,您可以自定義社交登錄按鈕的外觀和風格。 HybridAuth 提供社交登錄的功能,但按鈕的設計和佈局完全取決於您。

如何在我的 PHP 應用程序中更新 HybridAuth 庫?

更新 HybridAuth 就像在 Composer 中運行命令一樣簡單。這確保您始終擁有包含所有安全補丁和更新的最新版本。

我可以將 HybridAuth 與其他 PHP 框架一起使用嗎?

是的,HybridAuth 與框架無關,可以與任何 PHP 框架一起使用。這使得它成為使用不同 PHP 框架的開發人員的多功能選擇。

如何在我的本地開發環境中測試 HybridAuth 的社交登錄?

在本地測試社交登錄可能很棘手,因為社交網絡需要有效的回調 URL。但是,您可以使用 ngrok 等工具將本地服務器公開到互聯網,並將該 URL 用作回調 URL。

我可以使用 HybridAuth 通過非社交帳戶(如電子郵件和密碼)對用戶進行身份驗證嗎?

不可以,HybridAuth 專為社交登錄而設計。對於傳統的電子郵件和密碼身份驗證,您需要使用其他 PHP 庫或構建您自己的身份驗證系統。

The output maintains the original image formatting and placement. The text has been paraphrased and reorganized to improve flow and readability while preserving the original meaning. The code examples remain unchanged.

以上是與Hybridauth的PHP中的社交登錄的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板