and/oauth

简单且出色的OAuth库,支持许多提供商。试试吧!

0.6 2015-04-15 19:54 UTC

This package is auto-updated.

Last update: 2024-09-09 03:43:40 UTC


README

此库为PHP 5.4+提供oAuth支持,并且与任何需要oAuth客户端的项目集成非常简单。它不需要任何框架,因此在这方面您是自由的。

Build Status Dependency Status Latest Stable Version Latest Unstable Version Total Downloads

安装

此库可在Packagist上找到。推荐通过composer安装。

composer require and/oauth

功能

  • PSR-4兼容,易于互操作性
  • 在各个方面都是完全可扩展的。
    • 您可以通过扩展协议版本的AbstractService实现来实施任何具有任何自定义要求的服务。
    • 您可以使用任何想要的HTTP客户端,只需创建一个实现Buzz\Client\ClientInterface的类即可(包含两个实现)。
    • 您可以使用任何存储机制来存储令牌。默认情况下,包括会话、内存和Redis.io(需要PHPRedis)存储机制。通过实现OAuth\Common\Token\TokenStorageInterface来实施附加机制。
  • 库基于lusitanian/oauthoryzone/oauth-user-data库。以下是主要差异:
    • php-oauth使用第三方库来处理所有非oAuth逻辑,例如URL对象、HTTP客户端等。
    • php-oauth的目标是简单性,只需查看示例即可。
    • php-oauth通过提供相同的API和步骤,使远程提供商看起来相同。

服务支持

此库支持符合oAuth 1.x和oAuth 2.0的服务。以下是目前已实施的服务列表。

包含的服务实现

  • OAuth1
    • BitBucket
    • Etsy
    • FitBit
    • Flickr
    • Scoop.it!
    • Tumblr
    • Twitter
    • Xing
    • Yahoo
  • OAuth2
    • Amazon
    • BitLy
    • Box
    • Dailymotion
    • DevianArt
    • Dropbox
    • Eve Online
    • Facebook
    • Foursquare
    • GitHub
    • Google
    • Harvest
    • Heroku
    • Instagram
    • Jawbone UP
    • LinkedIn
    • Mailchimp
    • Microsoft
    • PayPal
    • Pocket
    • Reddit
    • RunKeeper
    • SoundCloud
    • Spotify
    • Ustream
    • Vkontakte
    • Yammer
  • 更多即将到来!

示例

基本使用示例位于examples/目录中。

用法

有关完整身份验证流程的用法,请参阅示例。

UserData

OAuth 1和2是用于在我们的应用程序中验证用户的优秀标准协议,php-oauth使我们能够以非常简单和简洁的方式执行此操作。无论如何,我们经常需要在用户验证后提取有关用户的各种信息。不幸的是,这不是一个标准化的东西,并且显然每个OAuth提供商都会根据其目的以非常具体的方式管理用户数据。

因此,每个提供商都提供特定的API和特定的数据方案,以提取有关已验证用户的数据。

如果我们构建只采用单个OAuth提供商的应用程序,这并不是什么大问题,但如果我们想采用更多的提供商,事情可能会变得非常繁琐。

为了使事情更清晰,假设您希望允许用户在您的应用程序中通过Facebook、Twitter和LinkedIn进行注册。为了提高转化率和加快注册流程,您可能希望通过复制OAuth提供商用户在注册时使用的用户资料数据来填充您的应用程序中的用户资料。是的,您必须处理3组不同的API和数据方案!假设有一天您能够添加GitHub和Google,那么将会有5种不同的API和数据方案...维护起来并不容易,不是吗?

好的,放松一下...这个库就是为了减轻这种痛苦而存在的!它提供了一个抽象层,在顶层库之上提取您已集成到应用程序中的OAuth提供商的用户数据。

它提供了一个统一且(非常)简单的接口来提取最有趣和最常用的用户数据,例如姓名用户名Id等。

为了给您一个关于这个库可以做什么的快速概念,请看以下代码片段

// $service is an istance of \OAuth\Common\Service\ServiceInterface (eg. the "Facebook" service)
// with a valid access token
$extractor = $service->constructExtractor(); // get the extractor for the given service
echo $extractor->getUniqueId(); // prints out the unique id of the user
echo $extractor->getUsername(); // prints out the username of the user
echo $extractor->getImageUrl(); // prints out the url of the user profile image

映射字段和方法

该库利用了提取器的概念。提取器是针对特定OAuth提供商获取数据逻辑的具体实现。

每个提取器可以检索以下用户数据字段

  • uniqueId(字符串)
  • username(字符串)
  • firstName(字符串)
  • lastName(字符串)
  • fullName(字符串)
  • email(字符串)
  • location(字符串)
  • description(字符串)
  • imageUrl(字符串)
  • profileUrl(字符串)
  • websites(数组)
  • verifiedEmail(布尔值)

对于每个字段,您都有方便的方法来获取字段值或检查它是否由给定的提供商支持

  • supportsUniqueId()
  • getUniqueId()
  • supportsUsername()
  • getUsername()
  • supportsFirstName()
  • getFirstName()
  • supportsLastName()
  • getLastName()
  • supportsFullName()
  • getFullName()
  • supportsEmail()
  • getEmail()
  • supportsLocation()
  • getLocation()
  • supportsDescription()
  • getDescription()
  • supportsImageUrl()
  • getImageUrl()
  • supportsProfileUrl()
  • getProfileUrl()
  • supportsWebsites()
  • getWebsites()
  • supportsVerifiedEmail()
  • isEmailVerified()

如果您尝试获取不受支持的字段或用户在其个人资料中没有设置的字段,您将获得一个null值。

服务API提供的所有其他数据都映射到一个特殊的extra数组中,可以通过以下方法访问

  • supportsExtra()
  • getExtra($key)
  • getExtras()

如果您想更好地了解每个方法的功能,可以查看ExtractorInterfacedocblocks

注意:在许多提供商中,一些用户数据字段仅在您为OAuth应用程序设置适当的范围/设置后才可用。

提取器助手

每个提取器都有以下助手

  • saveImage($savePath, /* int|false */ $width, /* int|false */ $height),仅当图像URL可用时工作,调整大小并将图像保存到磁盘
  • getImageRawData(/* int|false */ $width, /* int|false */ $height),仅当图像URL可用时工作,返回原始图像数据

注意:一些助手仅在其工作所需的字段可用时才工作

Bitdeli Badge