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

如何自定义Laravel Fortify(v8)的密码重置逻辑

修改Laravel Fortify密码重置用户检索逻辑

针对你的需求,要让Fortify在密码重置时仅匹配user_type为creator的用户记录,以下是两种直接可行的实现方案:

方案一:直接覆盖Fortify密码重置处理逻辑

在App\Providers\FortifyServiceProvider的boot方法中,自定义密码重置的完整处理流程,明确指定用户查询条件:

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Password;
use Illuminate\Auth\Events\PasswordReset;
use Laravel\Fortify\Fortify;

public function boot()
{
    // 保留原有Fortify配置...

    Fortify::resetPasswordsUsing(function (Request $request) {
        $credentials = $request->only('email', 'password', 'password_confirmation', 'token');

        // 核心修改:仅查找email匹配且user_type为creator的用户
        $user = \App\Models\User::where('email', $request->email)
            ->where('user_type', 'creator')
            ->first();

        if (!$user) {
            return back()->withErrors(['email' => trans('passwords.user')]);
        }

        $response = Password::reset(
            $credentials,
            function ($user, $password) {
                $user->forceFill([
                    'password' => Hash::make($password)
                ])->save();

                event(new PasswordReset($user));
            }
        );

        return $response == Password::PASSWORD_RESET
                    ? redirect()->route('login')->with('status', __($response))
                    : back()->withErrors(['email' => __($response)]);
    });
}

方案二:底层重写密码Broker的用户检索逻辑

如果希望在更底层统一修改密码重置的用户匹配规则,可自定义密码Broker:

  1. 在App\Providers\AuthServiceProvider的boot方法中扩展默认密码Broker:
use Illuminate\Support\Facades\Auth;
use Illuminate\Auth\Passwords\PasswordBroker;

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

    Auth::broker()->extend('creator-only', function ($app, $config) {
        $broker = new PasswordBroker(
            $app['auth.password.tokens'],
            $app['auth']->createUserProvider($config['provider']),
            $app['mailer'],
            $config['email']
        );

        // 重写用户解析逻辑,添加user_type条件
        $broker->setUserResolver(function ($credentials) {
            return \App\Models\User::where('email', $credentials['email'])
                ->where('user_type', 'creator')
                ->first();
        });

        return $broker;
    });
}
  1. 修改config/fortify.php配置,指定密码重置使用自定义Broker:
'passwords' => 'creator-only',

注意事项

  • 测试时需验证:当同一邮箱存在creator和player两条记录时,仅creator账号的密码会被重置
  • 可在密码重置页面添加提示,明确告知用户此流程仅适用于创作者账号

内容的提问来源于stack exchange,提问作者b4tch

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 09:07:24