stechstudio/laravel-socialite-auth

使用 socialite 作为 Laravel 身份验证驱动。

4.0 2020-11-19 21:59 UTC

This package is auto-updated.

Last update: 2024-09-10 09:22:27 UTC


README

Latest Version on Packagist Build Status Quality Score

本包提供快速配置和简单设置,以集成 Laravel Socialite 到您的应用程序。此外,它扩展了认证流程,允许在登录之前进一步验证用户是否满足您独特的需求。

当前支持

  • 将作为您应用程序的主要且唯一的认证方式。
  • 与 Laravel 自身的 Auth 框架或其他身份验证驱动程序一起使用路由特定的身份验证。
  • 除了前端应用程序的身份验证之外,还可以用于 Laravel Nova 的身份验证。

尚未提供

  • 仅 OAuth 的 Socialite 身份验证,不需要用户存在于 Laravel 用户提供者中。
  • 使用多个 Socialite 提供商(例如,Google 和 Facebook)。
  • 为不同的路由使用不同的提供商(例如,前端使用 Facebook,Nova 使用 Google)。

入门

  1. 安装 composer 包

    composer require stechstudio/laravel-socialite-auth
  2. 配置要使用的 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')
    ],
  3. 在您的应用程序中,为与 Socialite 用户相对应的每个用户类实现此包的 SocialiteAuthenticatable 接口。这两个方法返回字段和值,这些值将与 Socialite 返回的用户进行比较。

    public function getSocialiteIdentifierName()
    {
        return 'email';
    }
     
    public function getSocialiteIdentifier()
    {
        return $this->email;
    }

    默认情况下,这些值将与 socialite 返回的 email 属性进行比较。以下可以配置此选项和其他选项。

  4. 除了将 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',
    ...
],

混合认证

  1. 此包包括自己的 Authenticate 中间件,可用于在混合认证环境中执行正确的重定向。首先将其添加到您的路由中间件 app/Http/Kernel.php 中。

    protected $routeMiddleware = [
        ...
        'socialite' => \STS\SocialiteAuth\Authenticate::class,
        ...
    ];
  2. 向下,将其添加到默认 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 认证。

  1. 在您的 Providers 目录中添加 NovaServiceProvider 后,禁用默认生成的与认证相关的路由。
    protected function routes()
    {
        Nova::routes();
            // ->withAuthenticationRoutes()
            // ->withPasswordResetRoutes()
            // ->register();
    }
  2. 如果 Socialite 已配置为默认守卫,如上所述,则设置完成。否则,向 .env 文件添加 NOVA_GUARD 值,指示 socialite 是您希望使用的守卫。
    NOVA_GUARD=socialite