使用multi-auth时管理员登录页密码重置邮件链接错误求助
多认证体系管理员密码重置链接前缀错误解决思路
- 第一步:配置专属密码重置Broker
打开config/auth.php配置文件,在passwords配置项下新增管理员专属的密码重置代理,绑定你配置的管理员用户提供者:
return [ // 其他配置项 'passwords' => [ // 原有普通用户broker 'users' => [ 'provider' => 'users', 'table' => 'password_reset_tokens', 'expire' => 60, 'throttle' => 60, ], // 新增管理员专属broker 'admins' => [ 'provider' => 'admins', 'table' => 'password_reset_tokens', 'expire' => 60, 'throttle' => 60, ], ], ];
- 第二步:自定义管理员重置链接生成逻辑
在管理员模型中重写密码重置通知的发送方法,指定生成链接时使用管理员专属路由:
// App\Models\Admin.php use Illuminate\Auth\Notifications\ResetPassword as ResetPasswordNotification; public function sendPasswordResetNotification($token) { // 自定义重置链接生成规则 ResetPasswordNotification::createUrlUsing(function ($notifiable, $token) { return url(route('admin.password.reset', [ 'token' => $token, 'email' => $notifiable->getEmailForPasswordReset(), ])); }); $this->notify(new ResetPasswordNotification($token)); }
- 第三步:修正控制器Broker调用
在管理员端的忘记密码控制器中,指定使用刚才新增的adminsbroker:
// App\Http\Controllers\Admin\Auth\ForgotPasswordController.php use Illuminate\Support\Facades\Password; /** * 获取管理员专属密码重置代理 */ public function broker() { return Password::broker('admins'); }
- 第四步:确认路由配置
管理员端的所有认证相关路由都需要加上admin前缀,并且设置路由命名前缀为admin.,保证上一步中调用的admin.password.reset路由存在:
// routes/web.php Route::prefix('admin')->name('admin.')->group(function () { // 管理员登录路由 Route::get('login', [AdminLoginController::class, 'showLoginForm'])->name('login'); // 管理员密码重置路由 Route::get('password/reset/{token}', [AdminResetPasswordController::class, 'showResetForm'])->name('password.reset'); // 其他管理员相关路由 });
其他框架的多认证场景解决思路同理:不要复用普通用户的密码重置链接生成逻辑,给管理员身份单独指定带对应前缀的路由生成规则即可。
内容的提问来源于stack exchange,提问作者kapitan
相关产品推荐
相关产品推荐

