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

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

New file is the same as the default, except with the updated namespace.

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

My env SESSION_DRIVER is redis. I did not clear anything from Redis. (Note, this also happened in my other projects where driver was file, but I didn't care about it as much for them.)

我有两个分支,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

I'm hesitant to upgrade if it's going to invalidate all of my users' sessions and force them to login again. Is there a way to avoid this?

唯一修改过的其他文件是composer.jsoncomposer.lockapp/Exceptions/Handler.phpconfig/app.php;没有触及Auth.

推荐答案

I figured out what is causing the session to be invalidated. The problem is the session guard's getName() method.

在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');

这会让我的会话保持登录状态.

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

Laravel相关问答推荐

Laravel模型嵌入嵌套模型时只附加属性

如何更改LIVE上的Filament占位符内容?

Laravel 模型事件:delete() 不会从存储中删除文件

Laravel查询多对多关系

Laravel 5 - 更改模型文件位置

try 发布 AJAX 请求时 POST 405(方法不允许)-Laravel 4

Laravel:如何在 laravel 查询生成器中使用派生表/子查询

Laravel Blade 模板 @foreach 订单

Laravel 扩展验证自定义消息

删除表后如何重新迁移laravel迁移

Web 服务器如何处理请求?

如何处理 php (Laravel api) 和 javascript (AngularJS) 之间的日期时间

Laravel 搜索关系

在 Laravel 的数据透视表中添加 id 列有什么好处?

向 Laravel 重定向添加一个锚点

如何在特定项目中禁用初始化 JS/TS 语言功能?

Laravel 数据迁移

以编程方式而不是从 CLI 运行 Laravel 5 seeder

laravel:如何获取 eloquent 模型的列名?

Laravel 验证用户名不允许有空格