and*_*ber 18 session laravel laravel-routing laravel-5 laravel-5.2
从Laravel 5.1.17升级到5.2.我config/auth.php原来包含的:
'driver' => 'eloquent',
'model' => 'Project\User',
'table' => 'users',
Run Code Online (Sandbox Code Playgroud)
除了更新的命名空间外,新文件与默认文件相同.
'defaults' => [
'guard' => 'web',
'passwords' => 'users',
],
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
],
],
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => Project\User::class,
],
],
Run Code Online (Sandbox Code Playgroud)
我的环境SESSION_DRIVER是redis.我没有从Redis那里得到什么.(注意,这也发生在我的其他驱动程序项目中file,但我并不关心它们.)
我有两个分支,L5.2和master(在5.1.17上).切换分支后,我只是运行composer install
如果我登录的主,然后切换至15.2,我登出
如果我切换回主,我重新登录
,如果我登录上15.2,然后切换到主,我保持登录状态
.如果我再次打开到L5.2,我保持登录状态
如果它会使我的所有用户的会话无效并迫使他们再次登录,我对升级犹豫不决.有办法避免这种情况吗?
修改过的唯一的其他文件是composer.json,composer.lock,app/Exceptions/Handler.php,和config/app.php; 什么都没有触及Auth.
我找出了导致会话无效的原因。问题在于会话防护的getName()方法。
在 5.1.17 中:
return 'login_'.md5(get_class($this));
Run Code Online (Sandbox Code Playgroud)
在 5.2 中(默认$this->name情况web下):
return 'login_'.$this->name.'_'.sha1(get_class($this));
Run Code Online (Sandbox Code Playgroud)
此外,类名本身也从Guard变为SessionGuard
如果我将此方法替换为:
return 'login_'.md5('Illuminate\Auth\Guard');
Run Code Online (Sandbox Code Playgroud)
这使我的会话保持登录状态。
这是进步,但还不是完整的解决方案。真正的解决方案是使用新名称更新所有现有会话。我将编写一个脚本来完成此任务,然后更新我的答案。
| 归档时间: |
|
| 查看次数: |
1195 次 |
| 最近记录: |