agungsugiarto / codeigniter4-socialite
基于 Laravel Socialite 的 OAuth 1 和 OAuth 2 库的包装器。
Requires
- php: ^7.2|^8.0
- ext-json: *
- codeigniter4/framework: ^4.1
- guzzlehttp/guzzle: ^6.0|^7.0
Requires (Dev)
- laminas/laminas-coding-standard: ^2.1
- phpunit/phpunit: ^8.0|^9.3
This package is auto-updated.
Last update: 2024-09-12 08:16:04 UTC
README
关于
CodeIgniter4 Socialite 是从 Laravel Socialite 分支出来的,用于 OAuth 1 和 OAuth 2 库的包装器,以实现与 codeigniter4 的兼容性。
介绍
CodeIgniter4 Socialite 提供了一个表达式丰富的、流畅的接口,用于与 Facebook、Google、LinkedIn、GitHub、GitLab 和 Bitbucket 进行 OAuth 身份验证。它处理了您在编写社交身份验证代码时几乎所有的样板代码。
安装
要开始使用 Socialite,请使用 Composer 包管理器将包添加到项目的依赖项中
composer require agungsugiarto/codeigniter4-socialite
配置
将配置文件从 vendor/agungsugiarto/codeigniter4-socialite/src/Config/Socialite.php
复制到您的 codeigniter4 应用程序的配置文件夹中,将命名空间更改为 Config
,并将类扩展从 BaseConfig
更改为 \Fluent\Socialite\Config\Socialite
在开始使用 Socialite 之前,您需要为应用程序使用的 OAuth 提供商添加凭据。这些凭据应放置在应用程序的 app/Config/Socialite.php
配置文件中,并应使用键 facebook
、linkedin
、google
、github
、gitlab
或 bitbucket
,具体取决于应用程序所需的提供者
/** * {@inheritdoc} */ public $services = [ // .. 'github' => [ 'client_id' => '', 'client_secret' => '', 'redirect' => '', ], ];
如果
redirect
选项包含相对路径,它将自动解析为完全限定的 URL。
身份验证
路由
要使用 OAuth 提供商进行用户身份验证,您需要两个路由:一个用于将用户重定向到 OAuth 提供商,另一个用于在身份验证后接收来自提供者的回调。下面的示例控制器演示了这两个路由的实现
use Fluent\Socialite\Facades\Socialite; $routes->get('auth/redirect', function () { return Socialite::driver('github')->redirect(); }); $routes->get('auth/callback', function () { $user = Socialite::driver('github')->user(); // $user->token });
由 Socialite
外观提供的 redirect
方法负责将用户重定向到 OAuth 提供商,而 user
方法将读取传入的请求并在用户身份验证后从提供者获取用户信息。
可选参数
许多 OAuth 提供商支持在重定向请求中包含可选参数。要包含请求中的任何可选参数,请使用关联数组调用 with
方法
use Fluent\Socialite\Facades\Socialite; return Socialite::driver('google') ->with(['hd' => 'example.com']) ->redirect();
当使用
with
方法时,请小心不要传递任何保留关键字,如state
或response_type
。
访问作用域
在重定向用户之前,您还可以使用 scopes
方法向身份验证请求添加额外的“作用域”。此方法将合并所有现有作用域与您提供的作用域
use Fluent\Socialite\Facades\Socialite; return Socialite::driver('github') ->scopes(['read:user', 'public_repo']) ->redirect();
您可以使用 setScopes
方法覆盖身份验证请求上的所有现有作用域
use Fluent\Socialite\Facades\Socialite; return Socialite::driver('github') ->setScopes(['read:user', 'public_repo']) ->redirect();
检索用户详情
当用户重定向回您的身份验证回调路由后,您可以使用 Socialite 的 user
方法检索用户详情。由 user
方法返回的用户对象提供了各种属性和方法,您可以使用这些属性和方法在您的数据库中存储有关用户的信息。不同的属性和方法可能取决于您身份验证的 OAuth 提供商是否支持 OAuth 1.0 或 OAuth 2.0
$routes->get('/auth/callback', function () { $user = Socialite::driver('github')->user(); // OAuth 2.0 providers... $token = $user->token; $refreshToken = $user->refreshToken; $expiresIn = $user->expiresIn; // All providers... $user->getId(); $user->getNickname(); $user->getName(); $user->getEmail(); $user->getAvatar(); });
从令牌(OAuth2)检索用户详情
如果您已经有一个用户的有效访问令牌,您可以使用 Socialite 的 userFromToken
方法检索他们的详情
use Fluent\Socialite\Facades\Socialite; $user = Socialite::driver('github')->userFromToken($token);
无状态身份验证
可以使用 stateless
方法禁用会话状态验证。这在向 API 添加社交身份验证时很有用
use Fluent\Socialite\Facades\Socialite; return Socialite::driver('google')->stateless()->user();
贡献
感谢您考虑为Socialite做出贡献!
许可协议
CodeIgniter4 Socialite是开源软件,遵循MIT许可协议。