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

Laravel 9中Auth::getRecallerName()生成异常记住令牌名称问题

修复Laravel多守卫下「记住我」Cookie名称错误问题

问题根源是自定义RememberMeTrait中硬编码使用了web守卫名称生成Cookie,没有动态适配当前登录所用的守卫(admin/user)。以下是具体修复步骤:

1. 定位Trait中Cookie名称的硬编码部分

打开你的RememberMeTrait,找到设置「记住我」Cookie的代码段,原代码大概率固定写死了remember_web_前缀:

// 错误示例:硬编码web守卫
protected function setRememberTokenCookie($user)
{
    $rememberToken = $user->getRememberToken();
    if (!empty($rememberToken)) {
        $this->cookie->queue(
            'remember_web_' . $user->getKey(), // 此处web为硬编码
            $rememberToken,
            $this->getRememberMeExpiration()
        );
    }
}

2. 动态获取当前守卫名称修改Cookie前缀

修改Trait中的方法,通过$this->guard()->getName()动态获取当前登录使用的守卫名称,替换硬编码的web:

use Illuminate\Support\Facades\Cookie;

trait RememberMeTrait
{
    protected function setRememberTokenCookie($user)
    {
        $rememberToken = $user->getRememberToken();
        // 动态获取当前守卫名称(admin或user)
        $guardName = $this->guard()->getName();

        if (!empty($rememberToken)) {
            Cookie::queue(
                'remember_' . $guardName . '_' . $user->getKey(), // 动态生成Cookie前缀
                $rememberToken,
                $this->getRememberMeExpiration(),
                null,
                null,
                false,
                true // 保留HttpOnly安全属性
            );
        }
    }

    // 自定义过期时间方法(你的原有代码)
    protected function getRememberMeExpiration()
    {
        return 60 * 24 * 30; // 示例:30天有效期
    }
}

3. 确保LoginController正确绑定守卫

在对应的登录控制器(比如AdminLoginController)中,明确指定当前使用的守卫,避免默认使用web守卫:

use Illuminate\Support\Facades\Auth;

class AdminLoginController extends Controller
{
    use AuthenticatesUsers, RememberMeTrait;

    // 指定当前守卫为admin
    protected function guard()
    {
        return Auth::guard('admin');
    }

    // 其他登录相关代码...
}

4. 验证修复效果

使用admin守卫登录并勾选「记住我」,检查浏览器Cookie列表,应该能看到名称为remember_admin_xxx的Cookie,而非之前的remember_web_xxx。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 17:22:51