socialiteproviders / cognito
Laravel Socialite 的 Cognito OAuth2 提供程序
4.1.0
2022-07-18 08:41 UTC
Requires
- php: ^7.4 || ^8.0
- ext-json: *
- socialiteproviders/manager: ~4.0
This package is auto-updated.
Last update: 2024-08-26 21:28:32 UTC
README
composer require socialiteproviders/cognito
安装与基本使用
请参阅 基本安装指南,然后按照以下特定提供程序的说明进行操作。
在 config/services.php
中添加配置
'cognito' => [ 'host' => env('COGNITO_HOST'), 'client_id' => env('COGNITO_CLIENT_ID'), 'client_secret' => env('COGNITO_CLIENT_SECRET'), 'redirect' => env('COGNITO_CALLBACK_URL'), 'scope' => explode(",", env('COGNITO_LOGIN_SCOPE')), 'logout_uri' => env('COGNITO_SIGN_OUT_URL') ],
添加提供程序事件监听器
Laravel 11+
在 Laravel 11 中,默认的 EventServiceProvider
提供程序已被移除。相反,您需要在 AppServiceProvider
的 boot
方法中使用 Event
门面上的 listen
方法添加监听器。
- 注意:除非您使用自己的提供程序覆盖它们,否则您无需为内置的 Socialite 提供程序添加任何内容。
Event::listen(function (\SocialiteProviders\Manager\SocialiteWasCalled $event) { $event->extendSocialite('cognito', \SocialiteProviders\Cognito\Provider::class); });
Laravel 10 或以下
配置包的监听器以监听 `SocialiteWasCalled` 事件。将事件添加到 app/Providers/EventServiceProvider
中的 listen[]
数组中。有关详细说明,请参阅 基本安装指南。
protected $listen = [ \SocialiteProviders\Manager\SocialiteWasCalled::class => [ // ... other providers \SocialiteProviders\Cognito\CognitoExtendSocialite::class.'@handle', ], ];
使用方法
现在您应该能够像通常使用 Socialite 一样使用提供程序(假设您已安装了门面)
return Socialite::driver('cognito')->redirect();
退出应用程序和 Cognito,然后重定向到 URL
public function cognitoLogout() { Auth::logout(); // Log out app return redirect(Socialite::driver('cognito')->logoutCognitoUser()); // Call cognito logout url }
退出应用程序和 Cognito,然后重定向回登录界面。
public function cognitoSwitchAccount() { Auth::logout(); // Log out app $scopes = explode(",", env('COGNITO_LOGIN_SCOPE')); // Override default scopes if needed return redirect(Socialite::driver('cognito')->scopes($scopes)->switchCognitoUser()); // Call cognito logout url }
示例 env
COGNITO_HOST=https://your-app.auth.ap-southeast-2.amazoncognito.com COGNITO_CLIENT_ID=abc123 COGNITO_CLIENT_SECRET=abc123 COGNITO_CALLBACK_URL=https://your-app.ngrok.io/oauth2/callback COGNITO_SIGN_OUT_URL=https://example.com COGNITO_LOGIN_SCOPE="openid,profile"
有用的提示
- Cognito 需要 SSL,尝试 ngrok 进行本地测试(除了注销 URL 以外,适用于所有内容)。
- 返回的用户数组包含所有可用属性(在您的 Cognito 客户端应用程序中设置这些属性)。
- 如果收到状态错误,请尝试此操作
$user = Socialite::driver('cognito')->stateless()->user();
- "sub" 是 Cognito UUID,有关属性的更多信息请参阅 属性信息
- .env COGNITO_CALLBACK_URL 必须在您的 Cognito 客户端应用程序的回调 URL(s)中
- .env COGNITO_SIGN_OUT_URL 必须在您的 Cognito 客户端应用程序的注销 URL(s)中
返回的用户字段
id
昵称
名称
电子邮件
头像
user[]
可用的 Cognito 属性