oauth-io/oauth

简单易用的 OAuth

0.3.2 2015-02-27 17:29 UTC

This package is not auto-updated.

Last update: 2024-09-24 03:35:37 UTC


README

简单易用的 OAuth

此 SDK 允许您从 PHP 后端使用 OAuth.io,以处理来自服务器的身份验证和 API 调用,而不是来自前端,支持 100 多个 API 提供商。

SDK 的当前版本为 0.3.2。旧版本已弃用。

您还可以通过检查我们的 develop 分支来获取夜间版本。

有关此 SDK 及其方法的更多信息,请参阅 OAuth.io 上的 参考文档

特性

  • 服务器端 OAuth 身份验证流程
  • 后端 API 请求
  • 当可用时,请求统一用户信息(.me() 方法)
  • 当可用时,使用 refresh_token 更新访问令牌

常见用例

您不希望直接从前端使用 API,而是通过 PHP 后端的 Web 服务。

安装

首先,您需要在 OAuth.io 的 仪表板中将您的应用后端设置为 PHP

这允许您从提供者处获取刷新令牌(如果可用)。

您可以通过在 composer.json 中添加以下依赖项来安装它:

 "require": {
        ...
        "oauth-io/oauth": "0.3.0"
        ...
    },

然后在控制台运行

$ composer install

使用 SDK

OAuth 类存储在 OAuth_io 命名空间中。您需要在文件中包含它,如下所示(请确保您已包含 Composer 自动加载器文件)

<?php

require_once '/path/to/autoload.php';

use OAuth_io\OAuth;

//?>

PSR-0 支持

如果您使用具有自动加载器的 Composer,则可以使用 PSR-0 语法来使用此软件包。只需将以下代码放在脚本顶部即可

<?php

use OAuth_io\OAuth;

//?>

初始化

要初始化 SDK,您必须提供 OAuth.io 应用程序的关键字和密钥(您可以在 oauth.io 密钥管理器上获取它们)

<?php
$oauth = new OAuth();
$oauth->initialize('your_key', 'your_secret');
//?>

关于会话的说明

您可以将自己的会话数组传递给构造函数,这样如果您已经有一个会话管理器,则 SDK 不会对其进行干预

<?php
$_SESSION['some_subarray_in_the_session'] = array();
$myarray = $_SESSION['some_subarray_in_the_session'];

$oauth = new OAuth($myarray);
//?>

关于证书的说明

如果您正在使用 oauthdoauth.io 的开源版本)并且您还没有经过验证的 SSL 证书(如果您希望在将来将代码投入生产,则应该有),则可以像这样禁用 SSL 证书验证

<?php
$oauth = new OAuth(null, false);
//?>

用户认证

您需要做的第一件事是创建一个端点,将用户重定向到提供者的身份验证页面,以便用户可以接受您的应用程序所需的权限。

在此端点中,调用 redirect 方法,如下所示

$oauth->redirect('the_provider', '/callback/url');

这将自动将用户重定向到提供者的网站。一旦用户接受了权限,他们将被重定向到您的应用程序上的 '/callback/url',在那里您可以检索请求对象。

在关联到 '/callback/url' 的端点中,使用 redirect 选项设置为 true 调用 auth 方法以获取请求对象,如下所示

$request_object = $oauth->auth('the_provider', array(
    'redirect' => true
));

$request_object 是一个对象,允许您执行请求(请参阅以下部分了解如何操作),并包含用户的凭证。

使用会话获取请求对象

通常,您希望在用户连接到您的应用程序期间多次调用API。一旦您使用代码验证了用户一次,会话将自动配置为与SDK一起工作。

因此,您只需这样做即可获取请求对象

$request_object = $oauth->auth('the_provider');

将凭证保存以重新生成请求对象

您还可以将用户的凭证保存到cron中以进行请求。您可以从如下请求对象中获取凭证数组

$credentials = $request_object->getCredentials();
// Here save the $credentials array for later use

然后,当您想重新使用这些凭证时,您可以从中重建一个 $request_object

$request_object = $oauth->auth('the_provider', array(
    'credentials' => $credentials
));

向API发送请求

一旦您有了请求对象,您就可以向API发送请求。

<?php
$response_GET = $request_object->get('https://theprovider.com/api/endpoint');

$response_POST = $request_object->post('https://theprovider.com/api/endpoint', array('some' => 'data'));
$response_PUT = $request_object->put('https://theprovider.com/api/endpoint', array('some' => 'data'));
$response_DELETE = $request_object->del('https://theprovider.com/api/endpoint');
$response_PATCH = $request_object->patch('https://theprovider.com/api/endpoint', array('some' => 'data'));
//?>

您还可以从该请求对象调用 me(array $filters) 方法。此方法返回包含有关用户信息的统一数组。

<?php
$facebook_requester = $oauth->auth('facebook', array(
    'redirect' => true
));

$result = $facebook_requester->me(array('firstname', 'lastname', 'email'));

// you'll have $result["firstname"], $result["lastname"] and $result["email"] set with the user's facebook information.
//?>

您可以参考OAuth.io me()功能以获取有关此方法返回的字段更多信息。

刷新令牌

如果刷新令牌可用且访问令牌已过期,auth 方法将自动使用该刷新令牌获取新的访问令牌。

您可以通过在选项数组中传递 force_refresh 字段强制更新

$request_object = $oauth->auth('the_provider', array(
    'credentials' => $credentials,
    'force_refresh' => true
));

您还可以直接这样刷新一个凭证数组

$refreshed_credentials = $oauth->refreshCredentials($old_credentials);

为这个SDK做贡献

问题

请将问题和功能讨论在Github Issues上。我们将很乐意回答您的问题并根据您的反馈改进SDK。

拉取请求

欢迎您fork并创建拉取请求。我们感谢您在这项工作上所花费的时间,我们很乐意审查您的代码,并在它带来良好改进的情况下合并它 :)

如果您想创建一个拉取请求,请注意以下简单的规则

  • 每个拉取请求一个特性
  • 编写清晰的提交信息
  • 为您的特性编写单元测试:例如,如果您修复了一个bug,编写一个测试来证明bug的存在以及您的修复是如何解决它的。
  • 编写清晰的拉取请求描述

如果您这样做,我们将能够更快地合并您的拉取请求 :)

SDK被编写为一个Composer模块。您可以通过以下方式安装其依赖项

sdk/folder$ composer install

测试SDK

我们使用PHPUnit来测试SDK。要从SDK根目录测试它,只需运行以下命令

$ ./vendor/phpunit/phpunit/phpunit

许可协议

该SDK在Apache2许可协议下发布。