czernika/laravel-fortify-wp-users

允许在迁移数据库时,在Laravel Fortify应用程序中使用WordPress的哈希密码

0.2.1 2024-03-14 13:18 UTC

This package is auto-updated.

Last update: 2024-09-14 14:18:42 UTC


README

Run tests

允许在迁移数据库时,在Laravel Fortify应用程序中使用WordPress的哈希密码

基于 mikemclin/laravel-wp-password。然而,这个包似乎已经被废弃了

问题

您需要在全新的Laravel应用程序中使用旧WordPress数据库数据(不是数据库本身)。您已转移所需的数据(特别是 {prefix}_users),并希望用户能够使用他们的旧密码在Laravel Fortify应用程序中登录。然而,事实并非如此,因为应用程序使用不同的哈希密码机制(除非您使用像 roots/wp-password-bcrypt 这样的解决方案)。最坏的情况是,您将无法登录,最坏的情况是,它将显示一些错误,说明密码不是使用bcrypt/argon算法。这就是这个包可能有所帮助的地方

解决方案

我们将在身份验证管道的开始阶段几乎立即检查用户是否存在以及提供的哈希密码是否与数据库中的相同(假设它来自WordPress),然后使用Laravel的标准哈希更新它,并将请求传递到下一个操作,在那里Fortify本身可以检查用户。如果密码不是WordPress密码,我们将跳过此步骤并继续下一个操作

我们所做的只是检查哈希类型,如果是WordPress的,就更新它

支持

已测试Laravel版本10(PHP8.1+)和11(PHP8.2+)

安装

composer require czernika/laravel-fortify-wp-users

几乎完成

配置

更改用户提供者

当使用WordPress密码的用户使用错误密码时,会存在问题 - 您将看到运行时异常错误。为了防止它,我们需要使用自定义的 UserProvider。实际上,它们为您创建了eloquent和数据库驱动程序,您只需进行配置即可

// config/auth.php

'providers' => [
    // Use one of these
    'wp_eloquent' => [
        'driver' => 'wp_eloquent', // Driver name is important
        'model' => App\Models\User::class,
    ],

    'wp_database' => [
        'driver' => 'wp_database', // Driver name is important
        'table' => 'users',
    ],
],

'guards' => [
    'web' => [
        'driver' => 'session',
        // 'provider' => 'users',
        'provider' => 'wp_eloquent', // Instead os users pass key from providers
    ],
],

更改认证管道(可选)

该包使用Fortify的以下认证管道

use Laravel\Fortify\Fortify;
use Illuminate\Http\Request;
use Laravel\Fortify\Features;
use Laravel\Fortify\Actions\AttemptToAuthenticate;
use Laravel\Fortify\Actions\EnsureLoginIsNotThrottled;
use Laravel\Fortify\Actions\PrepareAuthenticatedSession;
use Laravel\Fortify\Actions\RedirectIfTwoFactorAuthenticatable;
use Czernika\FortifyWpUsers\Actions\TryToUpdateWpPassword;

Fortify::authenticateThrough(function (Request $request) {
    return array_filter([
        config('fortify.limiters.login') ? null : EnsureLoginIsNotThrottled::class,
        TryToUpdateWpPassword::class, // here is where the custom action was added
        Features::enabled(Features::twoFactorAuthentication()) ? RedirectIfTwoFactorAuthenticatable::class : null,
        AttemptToAuthenticate::class,
        PrepareAuthenticatedSession::class,
    ]);
});

您可以在 FortifyServiceProvider 文件中覆盖此管道。 TryToUpdateWpPassword 负责更新WordPress密码

测试

./vendor/bin/pest

许可证

开源,受MIT许可证约束