sashagm/social

使用 Laravel +10.x 包实现通过社交媒体进行身份验证

1.44.3 2024-09-11 18:58 UTC

README

Laravel Logo

Total Downloads Latest Stable Version License Code size Code size

PHP Version Laravel Version

使用 Laravel 包实现通过社交媒体进行身份验证

我们的包提供了一种方便的方法,让您的网站能够使用 Laravel Socialite 进行身份验证。同时,还提供了集成注册和通过常规表单进行身份验证的替代方案。简单的集成允许您快速连接到必要的提供者并使用它们。扩展的定制化允许您灵活地根据您的项目定制功能,而不需要进行重大更改。

目录

要求

安装和正常运行所需的基本要求

  • PHP >= 8.0
  • Laravel >= 10.x || 11.x
  • Composer >= 2.4.x

安装

要安装包,请执行以下命令

  • composer require sashagm/social
  • php artisan socials:install

使用

  1. 让我们首先定义我们的辅助配置在 /config/socials.php
    'admin_prefix'              => '', // Префикс для маршрутов
    'isActive'                  => true,  // Доступ авторизации
    'isProvider'                => true,  // Проверка провайдера( запрет на использование одинаковых email)
    'isLoginForm'               => true,  // Разрешать авторизовываться через обычную форму

    'user'                      => [
        'table'                 => 'users', // Таблица пользователей
        'avatar'                => "img",  //  Поле для аватарок
        'pass_colum'            => "password",  // Поле пароля
        'table_after'           => "password",  // После какого поля будут добавлены новые поля
        'access_colum'          => 'isBanned',  // Поле для учета блокировки/группа или роль
        'access_value'          =>  1,  // Какое значение необходимо получить чтобы заблокировать доступ
        'name_colum'            => 'name', // Поле для логина
        'email_colum'           => 'email', // Поле для почты
        'auto_update'           =>  true,   // Разрешить пользователям обновлять данные от провайдеров
        'update_colum'          =>  'isUpdate', // Поле для обновлений данных
        'getAvatar'             => true, // Использовать аватарку пользователя из провайдера социальной сети
        'defaultAvatar'         => '/path/to/default/avatar.png', // Путь к дефолтной аватарке
        'check_field'           => 'id', // Поле для проверки активности социальных сетей.
    ],

    'genPass'                   => [
        'method'                => 'bcrypt', // Метод шифрования пароля
        'filter'                => 'number',   // Фильтр генерации пароля
        'length'                => 8,  // Количество знаков для генерации пароля
        'min'                   => 6,  // Минимальное количество знаков
        'max'                   => 10, // Максимальное количество знаков
        'stable_length'         => true,   // Стабильная генерация
        'secret'                => 'erb26vwu2', // Секретная фраза для метода md5
        'viewReg'               => true,     // Верхний регистр для метода md5
        'default_gen'           => true,    // Использовать default_pass как дефолтный пароль
        'default_pass'          => "123456", // Строка для дефолтного пароля
        'custom_string'         => "", // Свой набор символов и знаков
        'custom_hard'           => "", // Свой набор символов и знаков
        'custom_unique'         => "", // Свой набор символов и знаков
        'generation_stages'     => 10, // Сколько стадий генерации будет

    ],

    'redirect'                  => [
        'auth'                  => 'home', // редирект после авторизации укажите именной роут
        'logout'                => 'home', // редирект после выхода укажите именной роут
     ],

    'routes'                    => [
        'auth_login'            => [
                                    '/login/{provider}', // url на вызов провайдера
                                    'social-auth'        // route name
        ],
        'auth_login_callback'   => [
                                    '/login/{provider}/callback', // url на вызов коллбэк
                                    'social-callback'             // route name
        ],
        'social_logout'         => [
                                    '/logout/social',           // url на вызов выход с аккаунта
                                    'social-logout'             // route name
        ],
        'auth_login_form'       => [
                                        '/login',               // url на вызов формы входа
                                        'auth-login-form'      // route name
        ],
        'auth_login_form_callback'=> [
                                        '/login/auth',           // url на вызов коллбэк form
                                        'auth-login-form-callback'             // route name
        ],
    ],

    'custom_fields'             => [
        /*
        'phone'                 => '+1234567890',
        'address'               => '123 Main Street',
        */
    ],

    'access_admin'              => [
        /*
        1,
        */
    ],

    'feedback_before'                  => [

        /* [
             'class' => 'App\Services\Testing',
             'method' => 'one',
             'params' => []
         ],
         */
     ],


     'feedback_after'                  => [

        /* [
             'class' => 'App\Services\Testing',
             'method' => 'one',
             'params' => []
         ],
         */
     ],

     'feedback_register'                  => [

        /* [
             'class' => 'App\Services\Testing',
             'method' => 'one',
             'params' => []
         ],
         */
     ],

    'providers'                            => [
       /* 'vkontakte', 'github',
        */
     ],

    'logger'                        => [

        'method'                    => true,              // Использовать дефолтный вариант логирования(false - Кастомный логер)
        'path'                      => "logs/custom.log",  // Путь для кастомного логера

        'log_login'                 => true,               // Логировать успешую авторизацию
        'log_register'              => true,               // Логировать успешую регистрацию
    ],
  1. 对于 User 模型,还需要添加一些新字段,这些字段将额外使用
    protected $fillable = [
        'img',
        'provider',
        'provider_id',
        'isUpdate',
    ];
  1. 运行以下命令以将辅助字段添加到用户表: php artisan migrate

  2. 要使用 Laravel Socialite 的附加身份验证提供者,您可以访问网站 socialiteproviders.com。在这里,您可以找到可用提供者的列表以及它们的安装和配置说明。

  3. 以下是与连接的 VK 提供者示例。一旦您连接了提供者,请将路由添加到您的 blade 模板中。

@guest
<a href="{{route('social-auth', 'vkontakte')}}"> Вход через ВК</a>
@endguest
身份验证和注册

您不仅可以使用我们的包通过社交媒体提供者进行身份验证,还可以通过常规表单进行身份验证。在配置文件 /config/socials.php 中,isLoginForm 参数将允许通过常规身份验证表单进行身份验证。在 genPass 部分,method 参数也负责我们的密码加密方法。

加密方法

我们不限于标准加密方法。如果您使用其他加密方法,您可以使用标准方法和不同的方法。这允许您针对不同的项目使用它们。

以下密码加密方法可用

  • bcrypt
  • md2 md4 md5
  • password_hash
  • sha1 sha224 sha256 sha384 sha512 sha512/224 sha512/256
  • sha3-224 sha3-256 sha3-384 sha3-512
  • ripemd128 ripemd160 ripemd256 ripemd320
  • whirlpool
  • tiger128,3 tiger160,3 tiger192,3 tiger128,4 tiger160,4 tiger192,4
  • snefru snefru256
  • gost gost-crypto
  • adler32
  • crc32 crc32b crc32c
  • fnv132 fnv1a32 fnv164 fnv1a64
  • joaat
  • murmur3a murmur3c murmur3f
  • xxh32 xxh64 xxh3 xxh128
  • pbkdf2
  • base64
服务模式

如果需要限制通过社交网络进行授权的访问,您可以在配置文件 /config/socials.php 中轻松实现,这由参数 isActive 负责。但您也可以授予您的管理员或特定人员始终可以授权访问,即使限制是激活的。为此,在 access_admin 部分中,通过逗号分隔,指定 User 模型的用户 id。对于他们,始终会提供访问权限。

    'access_admin'              => [
        /*
        1,
        2,
        */
    ],
指令

我们增加了使用 Blade 指令 的功能,为了方便,您可以使用链接列表来通过提供者进行授权。只需在 html 中添加指令 @socials 即可。

<body>
        @socials
</body>

同样,您可以为链接传递自己的类和样式,例如 @socials(class="btn btn-primary", style="font-size: 16px; color: #ff2d20")

<body>
        @socials(class="btn btn-primary", style="font-size: 16px; color: #ff2d20")
</body>
自定义字段

如果您在 User 模型中使用了需要添加的多个字段,您也可以在配置文件 /config/socials.php 中的 custom_fields 部分中添加它们。它们将在创建新用户时与提供者的输入数据一起添加。

    'custom_fields'             => [
        /*
        'phone'                 => '+1234567890',
        'address'               => '123 Main Street',
        */
    ],

您可以完全自定义所有使用的字段名称。在 user 部分中,您还可以配置如果您有的标准字段。

生成器过滤器

您可以使用不同的过滤器来生成密码,以便在配置文件 /config/socials.php 中的 genPass 部分生成不同的组合,参数 filter 负责。

可用的生成过滤器

  • string 只包含大写和小写字母。
  • number 只包含数字。
  • hard 只包含大写和小写字母以及数字。
  • hard-unique 只包含大写和小写字母、数字以及特殊符号。
  • rus-string 只包含大写和小写俄文字母。
  • rus-hard 只包含大写和小写俄文字母以及数字。
  • rus-unique 只包含大写和小写俄文字母、数字以及特殊符号。
  • custom-string 设置您自己的唯一字母、符号、字符组合。参数 custom_string
  • custom-hard 设置您自己的唯一字母、符号、字符组合。参数 custom_hard
  • custom-unique 设置您自己的唯一字母、符号、字符组合。参数 custom_unique

为了测试,您可以设置自己的默认密码。可以在 genPass 部分进行设置,这由参数 default_gen 负责:如果 true,则使用 default_pass 字符串作为您的密码;如果 false,则每次随机生成新密码。

密码长度

为了更安全的密码,其长度也很重要。您也可以在配置文件 /config/socials.php 中的 genPass 部分控制其长度。

长度选项

  • stable_length true 基于值 length 的稳定生成,false 基于随机数 minmax 的随机生成。

密码生成

为了提高密码的有效性和唯一性,您可以启动密码生成过程。在加密和创建用户之前,将创建一个包含大量密码的数组,结果将随机选择数组中的一个。要更改,请转到配置文件 /config/socials.php 中的 genPass 部分。generation_stages 负责生成字符串的阶段数量。

本地化

您可以设置自己的翻译以翻译短语。要编辑它们,请发布资源包。

运行自定义函数

您可以在用户认证前后运行自己的自定义函数。例如,如果您想使用额外的 spatie permission,可以在注册后运行一个函数来为用户分配角色。要在配置文件 /config/socials.php 中的 feedback_before(开始之前)和 feedback_after(之后)以及 feedback_register(注册之后)中指定函数,然后执行认证和重定向。

    'feedback_before'                  => [

        /* [
             'class' => 'App\Services\Testing',
             'method' => 'one',
             'params' => []
         ],

         */
     ],


     'feedback_after'                  => [

        /* [
             'class' => 'App\Services\Testing',
             'method' => 'one',
             'params' => []
         ],

         */
     ],

     'feedback_register'                  => [

        /* [
             'class' => 'App\Services\Testing',
             'method' => 'one',
             'params' => []
         ],

         */
     ],

自定义路由

为了避免与路由及其名称发生冲突,可以设置自己的路由。要管理,请转到配置文件 /config/socials.php 中的 routes 部分。目前可以管理三个路由:调用提供者调用提供者回调退出账号。为每个路由设置自己的 URL 和路由名称。

    'routes'                    => [
        'auth_login'            => [
                                    '/login/{provider}', // url на вызов провайдера
                                    'social-auth'        // route name
        ],
        'auth_login_callback'   => [
                                    '/login/{provider}/callback', // url на вызов коллбэк
                                    'social-callback'             // route name
        ],
        'social_logout'         => [
                                    '/logout/social',           // url на вызов выход с аккаунта
                                    'social-logout'             // route name
        ]
    ],

自定义日志记录器

如果您不想使用标准的日志文件,您可以使用单独的文件并记录日志数据到其中。要管理,请转到配置文件 /config/socials.php 中的 logger 部分。

    'logger'                        => [

        'method'                    => true,              // Использовать дефолтный вариант логирования(false - Кастомный логер)
        'path'                      => "logs/custom.log",  // Путь для кастомного логера

        'log_login'                 => true,               // Логировать успешую авторизацию
        'log_register'              => true,               // Логировать успешую регистрацию
    ],

附加功能

我们的软件包提供了一系列额外的功能,这些功能在处理通知时可能很有用。

  • php artisan socials:install - 此命令将安装所有必要的文件。
  • php artisan socials:access {--u= : 用户搜索字段 (ID)} {--a= : 访问标志 (0,1)} - 此命令可以封禁/解封用户。

测试

为了检查功能是否正常,可以执行一个特殊的命令

  • ./vendor/bin/phpunit --configuration phpunit.xml

许可证

Social 是一个开源软件,根据 MIT 许可证 许可。