許多現代網站都允許用戶通過其社交網絡帳戶登錄。例如,SitePoint 社區允許用戶使用其 Facebook、Twitter、Google、Yahoo 或 GitHub 帳戶登錄,無需註冊新帳戶。
本教程將介紹 HybridAuth —— 一個簡化社交登錄功能構建的 PHP 庫。
HybridAuth 充當應用程序與各種社交 API 和身份提供商之間的抽象 API。
關鍵要點
安裝
推薦使用 Composer 安裝 HybridAuth。我們還將使用 Slim 作為示例應用程序的基礎。
<code>{ "require": { "slim/slim": "2.*", "hybridauth/hybridauth": "2.3.0" } }</code>
使用 HybridAuth 進行社交登錄
要使用 HybridAuth,請將 /vendor/hybridauth/hybridauth/hybridauth
文件夾中的 config.php
和 index.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 庫。它允許 Web 開發人員輕鬆構建社交應用程序,方法是提供一種簡單的方法來通過用戶的社交媒體帳戶對其進行身份驗證。 HybridAuth 充當應用程序與各種社交 API 和身份提供商(如 Facebook、Twitter 和 Google)之間的抽象 API。它的工作原理是與 PHP 應用程序中現有的登錄系統集成,並添加社交登錄功能。
HybridAuth 可以通過 Composer(PHP 中的依賴項管理工具)安裝。安裝後,您需要通過設置要使用的提供商(社交網絡)來對其進行配置。每個提供商都需要一組唯一的參數,例如密鑰和密鑰,您可以通過在各個社交網絡的開發者平台上創建應用程序來獲得這些參數。
HybridAuth 非常安全,因為它使用 OAuth(一種開放的訪問委託標準)。 OAuth 提供安全的指定訪問,這意味著用戶可以授予網站訪問其在其他網站上的信息的權限,而無需向其提供密碼。這使得 HybridAuth 成為實現社交登錄的安全選擇。
是的,HybridAuth 可用於多個網站。您只需要使用每個網站的正確回調 URL 配置庫即可。這使得它成為管理多個網站的開發人員的靈活解決方案。
HybridAuth 具有內置的錯誤處理系統。發生錯誤時,它會拋出異常,您可以根據應用程序的錯誤處理策略捕獲和處理該異常。這使得調試和修復問題變得更容易。
是的,您可以自定義社交登錄按鈕的外觀和風格。 HybridAuth 提供社交登錄的功能,但按鈕的設計和佈局完全取決於您。
更新 HybridAuth 就像在 Composer 中運行命令一樣簡單。這確保您始終擁有包含所有安全補丁和更新的最新版本。
是的,HybridAuth 與框架無關,可以與任何 PHP 框架一起使用。這使得它成為使用不同 PHP 框架的開發人員的多功能選擇。
在本地測試社交登錄可能很棘手,因為社交網絡需要有效的回調 URL。但是,您可以使用 ngrok 等工具將本地服務器公開到互聯網,並將該 URL 用作回調 URL。
不可以,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中文網其他相關文章!