startpulsing / op-laravel-socialite-auth

使用 socialite 作为 Laravel 认证驱动。

4.0 2020-11-19 21:59 UTC

This package is auto-updated.

Last update: 2024-09-10 13:25:40 UTC


README

Latest Version on Packagist Build Status Quality Score

本包提供了快速连接和简单配置,以便将 Laravel Socialite 集成到您的应用程序中的最常见方式。此外,它扩展了认证流程,允许在用户登录之前进行额外的逻辑验证,以确保用户符合您独特的需求。

当前支持

  • 作为您应用程序的主认证方式。
  • 与 Laravel 自身的 Auth 框架或其他认证驱动程序一起进行路由特定的认证。
  • 除了前端应用程序认证之外,还用于 Laravel Nova 的认证。

尚未提供

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