与Hybridauth的PHP中的社交登录
许多现代网站都允许用户通过其社交网络帐户登录。例如,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中文网其他相关文章!

热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

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

热门文章

热工具

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

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

JWT是一种基于JSON的开放标准,用于在各方之间安全地传输信息,主要用于身份验证和信息交换。1.JWT由Header、Payload和Signature三部分组成。2.JWT的工作原理包括生成JWT、验证JWT和解析Payload三个步骤。3.在PHP中使用JWT进行身份验证时,可以生成和验证JWT,并在高级用法中包含用户角色和权限信息。4.常见错误包括签名验证失败、令牌过期和Payload过大,调试技巧包括使用调试工具和日志记录。5.性能优化和最佳实践包括使用合适的签名算法、合理设置有效期、

会话劫持可以通过以下步骤实现:1.获取会话ID,2.使用会话ID,3.保持会话活跃。在PHP中防范会话劫持的方法包括:1.使用session_regenerate_id()函数重新生成会话ID,2.通过数据库存储会话数据,3.确保所有会话数据通过HTTPS传输。

PHP8.1中的枚举功能通过定义命名常量增强了代码的清晰度和类型安全性。1)枚举可以是整数、字符串或对象,提高了代码可读性和类型安全性。2)枚举基于类,支持面向对象特性,如遍历和反射。3)枚举可用于比较和赋值,确保类型安全。4)枚举支持添加方法,实现复杂逻辑。5)严格类型检查和错误处理可避免常见错误。6)枚举减少魔法值,提升可维护性,但需注意性能优化。

SOLID原则在PHP开发中的应用包括:1.单一职责原则(SRP):每个类只负责一个功能。2.开闭原则(OCP):通过扩展而非修改实现变化。3.里氏替换原则(LSP):子类可替换基类而不影响程序正确性。4.接口隔离原则(ISP):使用细粒度接口避免依赖不使用的方法。5.依赖倒置原则(DIP):高低层次模块都依赖于抽象,通过依赖注入实现。

在PHPStorm中如何进行CLI模式的调试?在使用PHPStorm进行开发时,有时我们需要在命令行界面(CLI)模式下调试PHP�...

使用PHP的cURL库发送JSON数据在PHP开发中,经常需要与外部API进行交互,其中一种常见的方式是使用cURL库发送POST�...

静态绑定(static::)在PHP中实现晚期静态绑定(LSB),允许在静态上下文中引用调用类而非定义类。1)解析过程在运行时进行,2)在继承关系中向上查找调用类,3)可能带来性能开销。
