Auth::user 不会在重定向时保留

Posted

技术标签:

【中文标题】Auth::user 不会在重定向时保留【英文标题】:Auth::user is not preserved on redirect 【发布时间】:2016-04-02 13:59:14 【问题描述】:

从 laravel 5.1 更新到 5.2 后,我遇到了这个意想不到的问题。我使用Auth::login 手动登录用户。并且当我重定向用户时不会保留。

所有配置都是从清晰的 laravel 5.2 安装中优雅移植的。

这是路线代码:

Route::group([ 'middleware' => [ 'web' ] ], function () 
    Route::get('test', function () 
        $user = \Upping\Models\User::find(311);
        Auth::login($user);
        Auth::check(); // true
        return redirect('authCheck');
    );

    Route::get('authCheck', function () 
        Auth::check(); // false
    );
);

config\auth.php -> 提供者

'users' => [
    'driver' => 'eloquent',
    'model' => \Upping\Models\User::class,
],

说到 laravel 的体验,小小的提示对我来说应该足够了。感谢您的帮助。

【问题讨论】:

不太可能是重定向造成破坏。检查您的会话是否正常工作。 域是否完全相同(重定向之前和之后) - 有 www 还是没有 www?如果您不进行此重定向并转到authCheck url,会发生什么情况?也是false吗? @MarcinNabiałek 1) 域完全相同(都没有 www)。 2) 直接访问authCheck 也会给我false @ceejayoz 是的,我很确定这个问题与会话有关。虽然邪恶的核心没有引起我的注意。配置是简单的默认设置,在更新之前一切正常。 【参考方案1】:

你有没有把你所有的路线都放进去:

Route::group(['middleware' => ['web']], function () 
  // here your routes
);

?如果没有,您应该这样做,因为在 Laravel 5.2 中,会话默认为 web 组中间件启动。详情见Routing documentation

编辑

如果不是这样 - 我看到您使用自定义用户类 \Upping\Models\User 用于登录。 config/auth.phpproviders -> users -> model中设置了相同的类吗?

【讨论】:

不,绝对不是这样。我更新了我的帖子。抱歉隐藏信息。 我将该部分添加到问题中。情况似乎并非如此。用户类使用更新的特征。我可以在我 Auth::login 之后获取用户。不是在重定向之后。【参考方案2】:

所以真正的原因有点牵强。我阅读了错误日志并认为这是 Zend Z-ray 及其 laravel 插件对 5.2 更新的意义。

在我关掉它之后,一切都开始正常运行了。

【讨论】:

以上是关于Auth::user 不会在重定向时保留的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 表单请求动态字段在重定向时消失

重定向后不保留会话数据

谷歌开发者工具“网络”标签在重定向后清除

使用 java servlet 在重定向响应中丢失 HTTP 自定义标头

laravel 4.2在重定向时重新生成会话

Nginx在重定向时复制查询字符串