ahilmurugesan / socialite-apple
Requires
- firebase/php-jwt: ^5.2
- laravel/socialite: ^4.0
- lcobucci/jwt: ^3.3
- socialiteproviders/manager: ^3.0
This package is auto-updated.
Last update: 2020-05-09 05:57:51 UTC
README
我们很高兴宣布,SocialiteProvider - Apple 包已正式批准并添加到 Laravel Socialite。您可以在以下位置找到它们 https://packagist.org.cn/packages/socialiteproviders/apple
Socialite - Apple
1. 安装
// This assumes that you have composer installed globally composer require ahilmurugesan/socialite-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[]
。 -
您为该提供程序添加的监听器是
'Ahilan\\Apple\\AppleExtendSocialite@handle',
。 -
注意:除非您用您自己的提供者覆盖它们,否则您不需要为内置的社交提供者添加任何内容。
例如
/** * The event handler mappings for the application. * * @var array */ protected $listen = [ \SocialiteProviders\Manager\SocialiteWasCalled::class => [ // add your listeners (aka providers) here 'Ahilan\\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"), ],
要设置所需的环境变量,您可以使用以下与该包一起提供的 artisan 命令。
php artisan socialite:apple
请观看以下视频,了解获取所需的 Apple 登录凭证的流程。
命令将提示您所需的值,这些值可以通过遵循 设置视频 获得您需要提供以下密钥。
- 团队 ID
- 密钥 ID
- 客户端 ID
- 认证密钥(位于 storage/app/ 中的 p8 认证文件的文件名)例如:AuthKey_SAMPKEY.p8
- 重定向 URI(完全合格的 secure 回调 URL)例如:https://website.com/socialite/apple/callback
- 令牌刷新间隔(以天为单位)
客户端密钥将自动生成并添加到 .env 文件中,使用上述命令。
已注册的过期时间声明键值,其值必须不大于从服务器当前 Unix 时间起的 15777000 秒(6 个月)。
使用 Apple 登录客户端密钥的过期时间不能超过六个月。因此,建议在创建后至少每六个月刷新一次客户端密钥。您可以调整令牌刷新间隔。此包附带一个计划任务,可确保客户端令牌自动刷新。请确保您已启用 任务调度
要手动刷新客户端密钥,请运行以下命令
php artisan socialite:apple --refresh
5. 使用方法
-
现在您应该能够像通常使用 Socialite 一样使用它(假设您已安装了外观)
// 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 一起使用。只需确保您已开启外观支持,并且正确遵循设置说明。
注意:如果您在使用 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;