maer / oauth2-simple-client
league/oauth2-client 的包装器,具有简化的 API,并允许/拒绝电子邮件地址/域名
Requires
- league/oauth2-client: 0.9.*
This package is auto-updated.
Last update: 2024-09-09 01:18:45 UTC
README
league/oauth2-client 的包装器,具有简化的 API,并允许/拒绝电子邮件地址/域名。
它是框架无关的,所以您可以轻松地插入和播放。
安装
您需要 composer 来使此功能正常工作,因为此包依赖于 league/oauth2-client。我想您也可以手动安装它,但是因为该包还依赖于其他包,您可能会遇到麻烦。:-)
添加包
composer require maer/oauth2-simple-client 0.1.*
确保包含 composer 生成的自动加载器
<?php
require_once 'path-to/vendor/autoload.php';
使用方法
工厂方式
配置
首先添加配置文件。以 Google 为例
Maer\Oauth2Simple\Client\Factory::config('my-google', [
'clientId' => 'XXXXXXXX',
'clientSecret' => 'XXXXXXXX',
'redirectUri' => 'https://example.com/callback/',
'scopes' => ['email'],
'provider' => 'google',
'emailAllow' => ['foo@bar.com', '@example.com'], # Optional
'emailDeny' => ['evil@example.com', '@evil.com'] # Optional
]);
"provider" 参数可以是 "league/oauth2-client" 中内置的任何提供者。您可以访问该存储库以获取更多信息。此包正在使用最新的 0.9.*-版本。它也可以是自定义提供者的名称,更多关于这些,请访问 "league/oauth2-client"。如果是自定义提供者,请输入该类的完整命名空间,例如:"provider" : "Namespace\To\Provider\MyProvider"
这将仅在工厂下以 "my-google" 的名称保存配置。它不会创建实例或连接到任何东西,所以您可以在引导程序中或任何时候自由地这样做。只要在您尝试获取连接之前即可。
连接
获取已配置的连接
$provider = Maer\Oauth2Simple\Client\Factory::get('my-google');
获取授权 URL
<a href="<?= $provider->getAuthorizationUrl()?>">Log in</a>
在回调页面 example.com/callback/
$user = $provider->authorize();
如果用户成功授权,您将获得一个用户对象,否则将返回 "false"。然后您可以检查错误消息以了解原因
# For a human readable message
$errorMessage = $provider->getError();
# For an error code (check the constants in `Maer\Oauth2Simple\Client\Client`)
$errorCode = $provider->getErrorCode();
如果您需要令牌
$token = $provider->getToken();
如果您想执行 league/oauth2-client 支持但未添加到此包装器中的操作,您可以使用原始提供者
$leaguesProvider = $provider->getProvider();
手动方式
$provider = new Maer\Oauth2Simple\Client\Client([
'clientId' => 'XXXXXXXX',
'clientSecret' => 'XXXXXXXX',
'redirectUri' => 'https://example.com/callback/',
'scopes' => ['email'],
'provider' => 'google',
'emailAllow' => ['foo@bar.com', '@example.com'], # Optional
'emailDeny' => ['evil@example.com', '@evil.com'] # Optional
]);
现在取决于您保存 $provider
实例。否则,它就像上面一样。
电子邮件允许/拒绝配置
也许我们应该谈谈允许列表和拒绝列表。这基本上是我制作此包装器的原因。 :) 使用此功能,您可以决定谁可以或不可以认证/使用您的应用程序,这取决于他们的电子邮件地址。这需要提供者返回电子邮件,因此请确保您已将 "email" 添加到作用域中。我将添加使用 oauthId 的可能性以及其他参数,但首先使用电子邮件,因为我构建此软件时需要它。
emailAllow 和 emailDeny
'emailAllow' => ['foo@bar.com', '@example.com']
这将仅允许具有电子邮件地址 foo@bar.com
或任何具有 @example.com
域名电子邮件地址的用户。如果此数组为空或未提供,则视为允许所有人。
'emailDeny' => ['evil@example.com', '@evil.com']
这将拒绝具有电子邮件 evil@example.com
的用户,即使 @example.com
域名是允许的。不允许任何来自 @evil.com
的用户。这有点像糟糕的例子,因为 @evil.com 已经被拒绝,因为我们有一个允许列表。仅当您没有允许列表(如我之前所述,视为允许所有人)时,拒绝域名才有意义。