startpulsing / op-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 的认证。
尚未提供
- 仅通过 Socialite 进行 OAuth 认证,不需要用户在 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
接口。这两个方法返回将与社会 returned by 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