gpt4 book ai didi

laravel - 升级到 Laravel 5.2 会使所有 session 失效

转载 作者:行者123 更新时间:2023-12-03 13:37:21 24 4
gpt4 key购买 nike

从 Laravel 5.1.17 升级到 5.2。我的 config/auth.php最初包含:

'driver' => 'eloquent',
'model' => 'Project\User',
'table' => 'users',

新文件与默认文件相同,除了更新的命名空间。

'defaults' => [
'guard' => 'web',
'passwords' => 'users',
],
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
],
],
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => Project\User::class,
],
],

我的环境 SESSION_DRIVERredis .我没有从 Redis 清除任何东西。 (注意,这也发生在我的其他驱动程序为 file 的项目中,但我对他们并没有那么在意。)

我有两个分支,L5.2 和 master(在 5.1.17 上)。切换分支后,我只需运行 composer install

If I login on master, then switch to L5.2, I am logged out
If I switch back to master, I am logged back in
If I login on L5.2, then switch to master, I stay logged in
If I switch back to L5.2, I stay logged in



如果它会使我所有用户的 session 无效并强制他们再次登录,我会犹豫升级。有没有办法避免这种情况?

唯一被修改的其他文件是 composer.json , composer.lock , app/Exceptions/Handler.php , 和 config/app.php ;没有什么触及 Auth。

最佳答案

我弄清楚是什么导致 session 无效。问题是 session 守卫的 getName()方法。

在 5.1.17 中:

return 'login_'.md5(get_class($this));

在 5.2 中( $this->name 默认为 web):

return 'login_'.$this->name.'_'.sha1(get_class($this));

此外,类名本身从 Guard 更改。至 SessionGuard
如果我将此方法替换为:

return 'login_'.md5('Illuminate\Auth\Guard');

这使我的 session 保持登录状态。

这是一个进步,但还不是一个完整的解决方案。真正的解决方案是使用新名称更新所有现有 session 。我将编写一个脚本来完成此操作,然后更新我的答案。

关于laravel - 升级到 Laravel 5.2 会使所有 session 失效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34461284/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com