ahilmurugesan/socialiteproviders-apple

此包已被废弃,不再维护。作者建议使用 socialiteproviders/apple 包。

Laravel Socialite 的 Apple OAuth2 提供者

0.7.6 2020-04-29 14:29 UTC

This package is auto-updated.

Last update: 2020-05-09 05:58:04 UTC


README

我们很高兴地宣布,SocialiteProvider - Apple 包已正式批准并添加到 Laravel Socialite。您可以在以下位置找到它们 https://packagist.org.cn/packages/socialiteproviders/apple

SocialiteProvider - Apple

Total Downloads Latest Stable Version License

1. 安装

// This assumes that you have composer installed globally
composer require ahilmurugesan/socialiteproviders-apple

2. 服务提供者

  • 如果您已经添加了它,请从 config\app.php 中的 providers[] 数组中移除 Laravel\Socialite\SocialiteServiceProvider

  • \SocialiteProviders\Manager\ServiceProvider::class 添加到 config\app.php 中的 providers[] 数组。

例如

'providers' => [
    // a whole bunch of providers
    // remove 'Laravel\Socialite\SocialiteServiceProvider',
    \SocialiteProviders\Manager\ServiceProvider::class, // add
];
  • 注意:如果您想使用 Socialite Facade,您需要 安装它。

3. 事件监听器

  • SocialiteProviders\Manager\SocialiteWasCalled 事件添加到 app/Providers/EventServiceProvider 中的 listen[] 数组。

  • 将您的监听器(即来自提供者的监听器)添加到您刚刚创建的 SocialiteProviders\Manager\SocialiteWasCalled[]

  • 您为该提供者添加的监听器是 'SocialiteProviders\\Apple\\AppleExtendSocialite@handle',

  • 注意:除非您用自己的提供者覆盖它们,否则您不需要为内置的 socialite 提供者添加任何内容。

例如

/**
 * The event handler mappings for the application.
 *
 * @var array
 */
protected $listen = [
    \SocialiteProviders\Manager\SocialiteWasCalled::class => [
        // add your listeners (aka providers) here
        'SocialiteProviders\\Apple\\AppleExtendSocialite@handle',
    ],
];

参考

4. 配置设置

您需要将条目添加到服务配置文件,以便在配置文件缓存用于生产环境(Laravel 命令 artisan config:cache)之后,所有配置仍然可用。

添加到 config/services.php

"apple" => [    
  "client_id" => env("APPLE_CLIENT_ID"),  
  "client_secret" => env("APPLE_CLIENT_SECRET"),  
  "redirect" => env("APPLE_REDIRECT_URI"),
  "key_id" => env("APPLE_KEY_ID"),  
  "team_id" => env("APPLE_TEAM_ID"),  
  "auth_key" => env("APPLE_AUTH_KEY"),  
  "client_secret_updated_at" => env("APPLE_CLIENT_SECRET_UPDATED_AT"),  
  "refresh_token_interval_days" => env("APPLE_REFRESH_TOKEN_INTERVAL_DAYS"),  
],

5. 使用

// authorize with provider
return Socialite::with('apple')->redirect();

// fetch user after callback
$user = Socialite::with('apple')->user();

// fetch user using token ( token from apple authentication )
$token = "eyJraWQiOiJlWGF1bm1MIiwiYWxnIjoiUlMyNTYifQ.eyJpc3MiOiJodHRwczovL2FwcGxlaWQuYXBwbGUuY29tIiwiYXVkIjoiY29tLnZvbmVjLnNpd2EuYXBpIiwiZXhwIjoxNTg3OTI2MjAzLCJpYXQiOjE1ODc5MjU2MDMsInN1YiI6IjAwMTcxMC44NThkN2NhNWUwZDg0MWI5ODFiNGVkYWY2NWM0M2ZmNi4xOTMyIiwiYXRfaGFzaCI6IjRHZFprR0k2X2Q3Qk5xMFFJTkhKZEEiLCJlbWFpbCI6ImFoaWxtdXJ1Z2VzYW5AZ21haWwuY29tIiwiZW1haWxfdmVyaWZpZWQiOiJ0cnVlIiwiYXV0aF90aW1lIjoxNTg3OTI1NjAxLCJub25jZV9zdXBwb3J0ZWQiOnRydWV9.ciXdwwkySnG-Ne_l9NqxuLkDPyptUVvJ_Puk10LSsXNEtLBAijskQhIjwi3HYsEXNLdlbMGfJ25rnlMWu93RoqYJFo_u_rFjH_4Xt9E_ddnqY147yZvVw5k912FtXabQSl2bFiR7yrzuQvznxyAiYFP9v9HvXyTcYS2ki6ISdPjmTyb927yWyGDx-aigksV752toAA8XXmjjEyi01eY-wng4CaV4mxjJU_bQSpnh6zGLpmI-lxqBIfSbvW1ukMDh9VW7fIRq9l3yFba91TAT9oBv7QQVcEAU7jHNzKX3qU7JvCfr7d2UUXFVkOxYZFz1HuPHB5C9QuYn5TtFUb2ozw";
$user = Socialite::with('apple')->userFromToken($token));

Lumen 支持

您可以使用 Socialite 提供者与 Lumen。只需确保您已启用 facade 支持,并且正确遵循设置说明。

注意:如果您使用 Lumen,由于 Lumen 不跟踪状态,所有提供者将自动处于无状态。

此外,Lumen 中不能从 services[] 解析配置。您只能将值设置在 .env 文件中,如本文件中所示。如果需要,您还可以覆盖配置(如下所示)。

无状态

  • 您可以设置是否希望将提供者配置为无状态。请注意,OAuth提供者(Twitter、Tumblr等)必须支持您选择的任何选项。

注意:如果您使用 Lumen,由于 Lumen 不跟踪状态,所有提供者将自动处于无状态。

// to turn off stateless
return Socialite::with('apple')->redirect();

// to use stateless
return Socialite::with('apple')->stateless()->redirect();

覆盖配置

如果您需要在应用程序的任何位置动态覆盖提供者的环境或配置变量,可以使用以下方法

$clientId = "secret";
$clientSecret = "secret";
$redirectUrl = "http://yourdomain.com/api/redirect";
$additionalProviderConfig = ['site' => 'meta.stackoverflow.com'];
$config = new \SocialiteProviders\Manager\Config($clientId, $clientSecret, $redirectUrl);
return Socialite::with('apple')->setConfig($config)->redirect();

检索访问令牌响应体

Laravel Socialite默认仅允许访问access_token。这可以通过访问\Laravel\Socialite\User->token公共属性来实现。有时您需要访问整个响应体,这可能包含诸如refresh_token之类的项。

在Socialite中调用user()方法后,您可以通过访问属性$user->accessTokenResponseBody来获取访问令牌响应体;

$user = Socialite::driver('apple')->user();
$accessTokenResponseBody = $user->accessTokenResponseBody;

参考