You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Laravel 8 Jetstream登录时将默认Bcrypt改为SHA1加密

Laravel Jetstream 适配SHA1旧密码的实现方案

不需要直接重写Auth::attempt()核心方法,通过Laravel框架自带的自定义用户提供者机制改造即可,不会破坏框架原生逻辑,适配步骤如下:

步骤1:创建自定义SHA1用户提供者

新建app/Providers/Sha1UserProvider.php文件,继承框架原生的Eloquent用户提供者,重写密码验证逻辑:

<?php

namespace App\Providers;

use Illuminate\Auth\EloquentUserProvider;
use Illuminate\Contracts\Auth\Authenticatable as UserContract;

class Sha1UserProvider extends EloquentUserProvider
{
    /**
     * 验证用户登录凭证
     * @param  UserContract  $user
     * @param  array  $credentials
     * @return bool
     */
    public function validateCredentials(UserContract $user, array $credentials)
    {
        $inputPassword = $credentials['password'];
        // 匹配数据库存储的SHA1格式密码
        return sha1($inputPassword) === $user->getAuthPassword();
    }
}

如果旧项目的SHA1加密有自定义加盐逻辑,直接调整上述方法内的加密规则匹配原有逻辑即可。

步骤2:注册自定义用户提供者

打开app/Providers/AuthServiceProvider.php,在boot方法中添加自定义提供者的注册逻辑:

public function boot()
{
    $this->registerPolicies();

    \Auth::provider('sha1-eloquent', function ($app, $config) {
        return new Sha1UserProvider($app['hash'], $config['model']);
    });
}

步骤3:修改认证配置

打开config/auth.php,修改用户提供者的驱动配置:

'providers' => [
    'users' => [
        'driver' => 'sha1-eloquent', // 替换原有的eloquent驱动
        'model' => App\Models\User::class,
    ],
],

以上步骤完成后,原有Auth::attempt()方法可直接使用,无需额外修改,就能正常匹配数据库中存储的SHA1格式密码。

可选优化:自动升级密码加密规则

如果需要在用户首次登录成功后,自动将旧的SHA1密码升级为Laravel默认更安全的bcrypt哈希,可在app/Providers/JetstreamServiceProvider.php的boot方法中添加登录认证回调逻辑:

use Laravel\Fortify\Fortify;
use Illuminate\Support\Facades\Hash;

public function boot()
{
    // 原有Jetstream配置保持不变

    Fortify::authenticateUsing(function ($request) {
        $user = \App\Models\User::where('email', $request->email)->first();
        
        if ($user && sha1($request->password) === $user->password) {
            // 登录成功后覆盖更新为bcrypt密码
            $user->password = Hash::make($request->password);
            $user->save();
            return $user;
        }
        return null;
    });
}

内容的提问来源于stack exchange,提问作者Erfan Ahmed Siam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 20:57:03