stechstudio / laravel-socialite-auth
使用 socialite 作为 Laravel 身份验证驱动。
Requires
- php: ^7.1.3
- illuminate/support: ^8.0
- laravel/socialite: ^5.0
Requires (Dev)
- orchestra/testbench: ^6.0
- phpunit/phpunit: ^9.0
README
本包提供快速配置和简单设置,以集成 Laravel Socialite 到您的应用程序。此外,它扩展了认证流程,允许在登录之前进一步验证用户是否满足您独特的需求。
当前支持
- 将作为您应用程序的主要且唯一的认证方式。
- 与 Laravel 自身的 Auth 框架或其他身份验证驱动程序一起使用路由特定的身份验证。
- 除了前端应用程序的身份验证之外,还可以用于 Laravel Nova 的身份验证。
尚未提供
- 仅 OAuth 的 Socialite 身份验证,不需要用户存在于 Laravel 用户提供者中。
- 使用多个 Socialite 提供商(例如,Google 和 Facebook)。
- 为不同的路由使用不同的提供商(例如,前端使用 Facebook,Nova 使用 Google)。
入门
-
安装 composer 包
composer require stechstudio/laravel-socialite-auth
-
配置要使用的 Socialite 提供商,在
config/services.php
中指定重定向路径为socialite-auth.callback
的命名路由或相对路径/socialite-auth/callback
。例如'google' => [ 'client_id' => env('GOOGLE_CLIENT_ID'), 'client_secret' => env('GOOGLE_CLIENT_SECRET'), 'redirect' => route('socialite-auth.callback') ],
-
在您的应用程序中,为与 Socialite 用户相对应的每个用户类实现此包的
SocialiteAuthenticatable
接口。这两个方法返回字段和值,这些值将与 Socialite 返回的用户进行比较。public function getSocialiteIdentifierName() { return 'email'; } public function getSocialiteIdentifier() { return $this->email; }
默认情况下,这些值将与 socialite 返回的
email
属性进行比较。以下可以配置此选项和其他选项。 -
除了将 Socialite 用户与数据库中的一个用户匹配之外,您还可以提供闭包来确保满足任何其他要求。通过在 AppServiceProvider 的
boot()
方法中使用此包的 facade,提供所需的任何逻辑,如下所示SocialiteAuth::beforeLogin(function($user) { return str_contains($user->email, ['example.com']); });
配置
发布此包的配置后,以下选项将可在 config/socialite-auth.php
中使用。
使用
作为主要认证
删除任何现有的身份验证路由,例如由 Auth::routes() 添加的路由。然后在 config/auth.php
中,将默认守卫设置为 socialite
'defaults' => [ 'guard' => 'socialite', ... ],
混合认证
-
此包包括自己的 Authenticate 中间件,可用于在混合认证环境中执行正确的重定向。首先将其添加到您的路由中间件
app/Http/Kernel.php
中。protected $routeMiddleware = [ ... 'socialite' => \STS\SocialiteAuth\Authenticate::class, ... ];
-
向下,将其添加到默认 Authenticate 中间件之上,以确保在应用时具有优先权。
protected $middlewarePriority = [ ... \STS\SocialiteAuth\Authenticate::class, \App\Http\Middleware\Authenticate::class, ... ];
现在您可以在某些路由上自由指定 Socialite 认证...
Route::get(...)->middleware(['auth:socialite', 'socialite']);
...并在其他路由上指定应用程序内认证。
Route::get(...)->middleware('auth');
Laravel Nova 认证
最后,快速设置 Laravel Nova 的 Socialite 认证。
- 在您的 Providers 目录中添加 NovaServiceProvider 后,禁用默认生成的与认证相关的路由。
protected function routes() { Nova::routes(); // ->withAuthenticationRoutes() // ->withPasswordResetRoutes() // ->register(); }
- 如果 Socialite 已配置为默认守卫,如上所述,则设置完成。否则,向 .env 文件添加
NOVA_GUARD
值,指示socialite
是您希望使用的守卫。NOVA_GUARD=socialite