首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >升级到Laravel 5.2会使所有会话失效

升级到Laravel 5.2会使所有会话失效
EN

Stack Overflow用户
提问于 2015-12-25 16:30:11
回答 2查看 1.3K关注 0票数 18

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

代码语言:javascript
复制
'driver' => 'eloquent',
'model'  => 'Project\User',
'table'  => 'users',

新文件与默认文件相同,但具有更新的名称空间。

代码语言:javascript
复制
'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那里清除任何东西。(请注意,这也发生在我的其他项目中,其中driver是file,但我并不太关心它们。)

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

如果我在上登录,然后切换到L5.2,则我已注销

如果我切换回,我将重新登录

如果我在L5.2上登录,然后切换到,我将保持登录状态

如果切换回L5.2,我将保持登录状态

如果升级会使我所有用户的会话失效并迫使他们重新登录,我会犹豫是否升级。有没有办法避免这种情况?

其他仅有的被修改的文件是composer.jsoncomposer.lockapp/Exceptions/Handler.phpconfig/app.php;没有涉及到Auth。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-04 08:42:53

我找出了导致会话无效的原因。问题出在会话保护的getName()方法上。

在5.1.17中:

代码语言:javascript
复制
return 'login_'.md5(get_class($this));

在5.2中(默认情况下$this->nameweb ):

代码语言:javascript
复制
return 'login_'.$this->name.'_'.sha1(get_class($this));

此外,类名本身也从Guard更改为SessionGuard

如果我将此方法替换为:

代码语言:javascript
复制
return 'login_'.md5('Illuminate\Auth\Guard');

可以让我的会话保持登录状态。

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

票数 2
EN

Stack Overflow用户

发布于 2015-12-25 17:24:42

您应该做的是打开app/Http/routes.php

并将您现有的所有路由包装为:

代码语言:javascript
复制
Route::group(['middleware' => ['web']], function () {
    // here your previous routes
});

编辑

在测试之后,我可以确认这个行为。

在这些情况下:

  • 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

这似乎是官方和预期的行为,因为已经添加了升级指南:

由于身份验证系统的更改,当您升级到Laravel 5.2时,任何现有会话都将失效。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34461284

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档