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

Laravel 8 Auth::logoutOtherDevices始终跳转login路由问题

问题根因

触发跨设备登出时首次跳转默认login路由,和你自定义的Authenticate中间件配置无关,核心原因是:

  • Auth::logoutOtherDevices的跨设备会话校验逻辑由AuthenticateSession中间件执行,这个中间件自带独立的未认证跳转逻辑,执行优先级早于你自定义的Authenticate中间件
  • 跨设备登出触发时,其他设备的请求进入后,AuthenticateSession中间件会校验会话内存储的用户密码哈希,发现和当前数据库值不匹配时,会直接抛出认证异常,默认硬编码跳转至login路由,完全不会调用你在Authenticate中间件里编写的redirectTo方法
  • 你在Authenticate中间件中添加的dd()调试代码首次不触发,就是因为请求还没走到Authenticate中间件就已经被拦截跳转;等你手动刷新页面时,旧会话已经被完全清理,请求才会进入Authenticate中间件,触发你配置的auth.show路由跳转逻辑。
修复方案

只需要重写AuthenticateSession中间件的跳转规则即可,操作步骤如下:

  • 第一步:新建自定义的AuthenticateSession中间件,继承框架自带的核心类,重写跳转方法:
namespace App\Http\Middleware;

use Illuminate\Session\Middleware\AuthenticateSession as BaseAuthenticateSession;

class AuthenticateSession extends BaseAuthenticateSession
{
    /**
     * 未通过会话校验时的跳转路径
     *
     * @param  \Illuminate\Http\Request  $request
     * @return string|null
     */
    protected function redirectTo($request)
    {
        if (! $request->expectsJson()) {
            return route('auth.show');
        }
    }
}
  • 第二步:打开app/Http/Kernel.php文件,在web中间件组的配置中,将框架自带的AuthenticateSession中间件替换为你刚才编写的自定义版本:
protected $middlewareGroups = [
    'web' => [
        // 保留其他原有中间件配置
        \App\Http\Middleware\Authenticate::class,
        // 注释或删除原有的 \Illuminate\Session\Middleware\AuthenticateSession::class
        \App\Http\Middleware\AuthenticateSession::class, // 替换为自定义中间件
        // 保留其他原有中间件配置
    ],
];

修改完成后,跨设备登出触发时会直接跳转至auth.show路由,不会再出现先跳转未定义login路由的问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 11:03:20