cube-agency/nova-google2fa

此包为 Laravel Nova 提供Google2FA。

1.1.4 2023-11-07 10:13 UTC

This package is auto-updated.

Last update: 2024-09-07 12:01:46 UTC


README

此包强制为 Laravel Nova 实施双因素认证。

流程

激活

  • 用户获取恢复码。

Recovery codes

  • 用户在设备上激活双因素认证。

Activate 2FA

验证

  • 用户使用双因素认证验证登录。

Enter 2FA

恢复

  • 如果用户输入无效代码,则显示恢复按钮。

Enter 2FA

  • 用户输入恢复码。

Enter 2FA

  • 用户登录后,可以通过 Nova 用户资源选择重置双因素认证。

Enter 2FA

  • 添加用户重置双因素认证的能力
     Text::make('Reset two-factor auth', function () {
                if (auth()->id() === $this->id) {
                    $route = route('nova.google2fa.destroy');
                    $buttonText = __('nova-google2fa::2fa-auth.actions.reset');

                    return "<a href='{$route}' class='class=shadow relative bg-primary-500 hover:bg-primary-400 text-white dark:text-gray-900 cursor-pointer rounded text-sm font-bold focus:outline-none focus:ring ring-primary-200 dark:ring-gray-600 inline-flex items-center justify-center h-9 px-3 shadow relative bg-primary-500 hover:bg-primary-400 text-white dark:text-gray-900'>
                            {$buttonText}</a>";
                }
            })->asHtml(),

安装

通过 composer 安装

$ composer require cube-agency/nova-google2fa

发布配置和迁移文件

$ php artisan vendor:publish --provider="CubeAgency\NovaGoogle2fa\ToolServiceProvider"

运行迁移

注意:在运行迁移之前,请确保根据您的项目调整配置值,以避免错误。

$ php artisan migrate

在您的 User 模型中使用 trait use CubeAgency\NovaGoogle2fa\Traits\HasGoogle2fa; 添加双因素认证关系

或者

手动在 User 模型中添加关系

use CubeAgency\NovaGoogle2fa\Models\User2fa;
use Illuminate\Database\Eloquent\Relations\HasOne;
...

/**
 * @return HasOne
 */
public function user2fa(): HasOne
{
    return $this->hasOne(User2fa::class, 'user_id');
}

nova.config 中添加中间件。

[
    ...
    'middleware' => [
        ...
        \CubeAgency\NovaGoogle2fa\Http\Middleware\Google2fa::class,
        ...
    ],
]

配置

return [
    /**
     * Disable or enable middleware.
     */
    'enabled' => env('GOOGLE_2FA_ENABLED', true),

    'models' => [
        /**
         * Change this variable to path to user model.
         */
        'user'    => 'App\User',

        /**
         * Change this if you need a custom connector
         */
        'user2fa' => User2fa::class,
    ],
    'tables' => [
        /**
         * Table in which users are stored.
         */
        'user' => 'users',
    ],

    'recovery_codes' => [
        /**
         * Number of recovery codes that will be generated.
         */
        'count'             => 8,

        /**
         * Number of blocks in each recovery code.
         */
        'blocks'            => 3,

        /**
         * Number of characters in each block in recovery code.
         */
        'chars_in_block'    => 16,
    ],

    'recovery_input' => 'recovery_code',

    'app_store_links' => [
        'android' => 'https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2&hl=en&gl=US',
        'ios' => 'https://apps.apple.com/lv/app/google-authenticator/id388497605',
    ]
];