codezero / oauth
无需烦恼的社交认证。
Requires
- php: >=5.4.0
- and/oauth: ~0.6
Requires (Dev)
- henrikbjorn/phpspec-code-coverage: ~1.0
- phpspec/phpspec: ~2.0
This package is auto-updated.
Last update: 2024-09-11 14:18:55 UTC
README
无需烦恼的社交认证!
此包是围绕 logical-and/php-oauth 的包装,旨在使通过第三方提供程序进行用户认证更加容易。支持纯PHP和 Laravel 5。
安装
通过Composer安装此包
composer require codezero/oauth
注册应用
您需要为希望支持的每个提供程序创建一个应用。它们将为您提供应用ID(或密钥)和应用密钥。
纯PHP实现
创建配置文件
创建一个 providers.php
配置文件,并将您的密钥存储在其中
<?php
return [
'facebook' => [
'key' => '123',
'secret' => '456',
],
'google' => [
'key' => '123',
'secret' => '456',
],
// ...
];
创建脚本
创建一个 .php
文件并自动加载供应商类
require_once 'vendor/autoload.php'; // Path may vary
然后,导入并实例化类
use CodeZero\OAuth\Authenticator;
use CodeZero\OAuth\ProviderFactory;
$credentials = include __DIR__.'/path/to/providers.php';
$providerFactory = new ProviderFactory($credentials);
$auth = new Authenticator($providerFactory);
现在您有 $auth
可以使用。转到 #usage 以了解它有多简单... ;)
Laravel 5实现
将ServiceProvider添加到 config/app.php
中的提供者数组中
'providers' => [
'CodeZero\OAuth\Laravel5\OAuthServiceProvider'
]
在 config
文件夹中创建 oauth-providers.php
并添加您的配置数组,或者简单地发布并编辑它
php artisan config:publish codezero/oauth
然后您可以在您的应用的任何位置“制作”(或注入)一个 Authenticator
实例
$auth = \App::make('CodeZero\OAuth\Contracts\Authenticator');
现在您有 $auth
可以使用。转到 #usage 以了解它有多简单... ;)
用法
重定向...享受旅途!
使用 Authenticator
实例($auth
),您可以调用... Facebook(或Google,或...)
$details = $auth->request('facebook'); //=> Lower case!
当您运行 $auth->request('provider')
时,您将被重定向到提供程序。您需要授予或拒绝访问您个人信息的权限,然后您将被重定向回您来自的页面。
重要:您需要在您的应用中将页面设置为有效的回调URL!
请注意,当您被重定向回时,此脚本将始终在URL中附加
?run=1
。根据提供程序的不同,它们对这一点很敏感。至少对于Google来说,这非常重要,所以如果需要,请确保在您的应用设置中将它包含在回调URL中!
检查响应...
现在您可以处理提供程序返回的 $details
。
if ($details) {
$email = $details->getEmail();
$firstName = $details->getFirstName();
$lastName = $details->getLastName();
// ...
} else {
// User canceled!
}
如果用户拒绝,则 $details
将为 false
,您可以执行所需的任何操作。
如果授予访问权限,则 $details
将是来自 logical-and/php-oauth 包的 ExtractorInterface
实例,它具有几个方便的方法来获取特定的用户数据。请参阅 https://github.com/logical-and/php-oauth#userdata 了解有关此内容的更多信息或查看 interface
。
重定向用户...
在成功请求后重定向回您的网站后,您会注意到URL中有一个令牌。此令牌不能重复使用,因此如果刷新页面,将抛出异常...
因此,在完成后将用户重定向到其他地方可能很明智。
可用提供程序
logical-and/php-oauth
支持大量不同的服务。
只要您在配置中添加必要的密钥,并且存在一个 Provider 类,这些服务都可以与该包一起工作。
创建一个 Provider
如果您尚未包含一个 支持的 提供者,您可以自己创建一个
use CodeZero\OAuth\BaseProvider;
class ExampleProvider extends BaseProvider
{
/**
* Internal Provider Handle
*
* @var string
*/
protected $handle = 'example';
/**
* Default Scope
*
* @var array
*/
protected $defaultScope = [ 'example.scope' ];
/**
* Default Request Uri
*
* @var string
*/
protected $defaultRequest = 'example/uri';
}
句柄需要匹配在 php-oauth 的示例 中使用的那些。基本作用域和请求 URI 也可以在那里找到。
只需将您的类保存在某个地方,确保它被(自动)加载,然后在配置数组中按如下方式引用它
'example' => [
'key' => '123',
'secret' => '456',
'scope' => [], // Optional: overrule default
'request_uri' => '', // Optional: overrule default
'callback_url' => '', // Optional: overrule default
'provider_class' => 'ExampleProvider', //=> Your custom provider
],
示例
查看 示例。
待办事项
- 添加测试...
- 添加更多提供者...
- 为 Laravel 的 Session 创建存储驱动...
- 修复错误(也许...可能...) :)
测试
$ vendor/bin/phpspec run
安全
如果您发现任何与安全相关的问题,请通过 电子邮件 告诉我,而不是使用问题跟踪器。
许可
MIT 许可证(MIT)。请参阅 许可文件 了解更多信息。