agungsugiarto/codeigniter4-socialite

基于 Laravel Socialite 的 OAuth 1 和 OAuth 2 库的包装器。

v5.0.0 2021-08-18 14:50 UTC

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 配置文件中,并应使用键 facebooklinkedingooglegithubgitlabbitbucket,具体取决于应用程序所需的提供者

/**
 * {@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 方法时,请小心不要传递任何保留关键字,如 stateresponse_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许可协议