许多现代网站都允许用户通过其社交网络帐户登录。例如,SitePoint 社区允许用户使用其 Facebook、Twitter、Google、Yahoo 或 GitHub 帐户登录,无需注册新帐户。
本教程将介绍 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.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 一起用于社交登录?
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中文网其他相关文章!

PHP仍然流行的原因是其易用性、灵活性和强大的生态系统。1)易用性和简单语法使其成为初学者的首选。2)与web开发紧密结合,处理HTTP请求和数据库交互出色。3)庞大的生态系统提供了丰富的工具和库。4)活跃的社区和开源性质使其适应新需求和技术趋势。

PHP和Python都是高层次的编程语言,广泛应用于Web开发、数据处理和自动化任务。1.PHP常用于构建动态网站和内容管理系统,而Python常用于构建Web框架和数据科学。2.PHP使用echo输出内容,Python使用print。3.两者都支持面向对象编程,但语法和关键字不同。4.PHP支持弱类型转换,Python则更严格。5.PHP性能优化包括使用OPcache和异步编程,Python则使用cProfile和异步编程。

PHP主要是过程式编程,但也支持面向对象编程(OOP);Python支持多种范式,包括OOP、函数式和过程式编程。PHP适合web开发,Python适用于多种应用,如数据分析和机器学习。

PHP起源于1994年,由RasmusLerdorf开发,最初用于跟踪网站访问者,逐渐演变为服务器端脚本语言,广泛应用于网页开发。Python由GuidovanRossum于1980年代末开发,1991年首次发布,强调代码可读性和简洁性,适用于科学计算、数据分析等领域。

PHP适合网页开发和快速原型开发,Python适用于数据科学和机器学习。1.PHP用于动态网页开发,语法简单,适合快速开发。2.Python语法简洁,适用于多领域,库生态系统强大。

PHP在现代化进程中仍然重要,因为它支持大量网站和应用,并通过框架适应开发需求。1.PHP7提升了性能并引入了新功能。2.现代框架如Laravel、Symfony和CodeIgniter简化开发,提高代码质量。3.性能优化和最佳实践进一步提升应用效率。

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

PHP类型提示提升代码质量和可读性。1)标量类型提示:自PHP7.0起,允许在函数参数中指定基本数据类型,如int、float等。2)返回类型提示:确保函数返回值类型的一致性。3)联合类型提示:自PHP8.0起,允许在函数参数或返回值中指定多个类型。4)可空类型提示:允许包含null值,处理可能返回空值的函数。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

Dreamweaver Mac版
视觉化网页开发工具

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中