从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,
],
],
我的_v SESSION_DRIVER
是 redis
. 我没有从Redis那里得到什么 . (注意,这也发生在我的其他驱动程序为 file
的项目中,但我并不关心它们 . )
我有两个分支,L5.2和master(在5.1.17上) . 切换分支后,我只需运行 composer install
如果我登录主机,然后切换到L5.2,我退出如果我切换回主机,我重新登录如果我登录L5.2,然后切换到主机,我保持登录如果我切换回到L5.2,我保持登录状态
如果它会使我的所有用户的会话无效并迫使他们再次登录,我对升级犹豫不决 . 有办法避免这种情况吗?
唯一被修改的其他文件是 composer.json
, composer.lock
, app/Exceptions/Handler.php
和 config/app.php
;什么都没有触及Auth .
2 回答
我弄清楚是什么导致会话失效 . 问题是会话守卫的
getName()
方法 .在5.1.17中:
在5.2中(
$this->name
默认为web
):此外,类名本身也从
Guard
更改为SessionGuard
如果我用以下方法替换此方法:
这使我的会话保持登录状态 .
这是进步,但还不是一个完整的解决方案 . 真正的解决方案是使用新名称更新所有现有会话 . 我将处理一个脚本来完成这个,然后更新我的答案 .
你应该做的就是打开
app/Http/routes.php
并使用以下内容包装所有现有路线:
EDIT
经过测试,我可以确认这种行为 .
在这些情况下:
5.1.17 - > 5.2
5.1.23 - > 5.2
5.1.28 - > 5.2 . *
升级到5.2后,用户似乎不再被记录 . 进入5.1版本的分支时,用户会保持记录状态 . 当从5.2返回到5.1时,再次记录用户 .
目前你应该在这里创建问题https://github.com/laravel/framework/issues并等待回应
EDIT2
这似乎是官方和预期的行为,因为升级指南已添加: