documentacion - update en laravel 5
Actualizar a Laravel 5.2 invalida todas las sesiones (2)
Actualización de Laravel 5.1.17 a 5.2. Mi config/auth.php
originalmente contenía:
''driver'' => ''eloquent'',
''model'' => ''Project/User'',
''table'' => ''users'',
El nuevo archivo es el mismo que el predeterminado, excepto con el espacio de nombres actualizado.
''defaults'' => [
''guard'' => ''web'',
''passwords'' => ''users'',
],
''guards'' => [
''web'' => [
''driver'' => ''session'',
''provider'' => ''users'',
],
''api'' => [
''driver'' => ''token'',
''provider'' => ''users'',
],
],
''providers'' => [
''users'' => [
''driver'' => ''eloquent'',
''model'' => Project/User::class,
],
],
Mi env redis
es redis
. No le quité nada a Redis. (Tenga en cuenta que esto también sucedió en mis otros proyectos donde se archivó el controlador, pero no me importó tanto para ellos).
Tengo dos sucursales, L5.2 y master (que está en 5.1.17). Después de cambiar de ramas, simplemente ejecuto la composer install
Si inicio sesión en master , luego cambio a L5.2 , me desconecto
Si vuelvo al maestro , vuelvo a iniciar sesión
Si inicio sesión en L5.2 , luego cambio a maestro , permanezco conectado
Si vuelvo a la L5.2 , me quedo conectado
Dudo en actualizar si va a invalidar todas las sesiones de mis usuarios y obligarlos a iniciar sesión nuevamente. Hay alguna manera de evitar esto?
Los únicos otros archivos que se modificaron fueron composer.json
, composer.lock
, app/Exceptions/Handler.php
y config/app.php
; nada que haya tocado a Auth.
Lo que debes hacer es abrir la app/Http/routes.php
y envuelve todas tus rutas existentes con:
Route::group([''middleware'' => [''web'']], function () {
// here your previous routes
});
EDITAR
Después de la prueba puedo confirmar este comportamiento.
En esos casos:
- 5.1.17 -> 5.2
- 5.1.23 -> 5.2
- 5.1.28 -> 5.2. *
después de la actualización a 5.2 El usuario parece no estar registrado más. Al entrar en versiones en 5.1 rama el usuario se mantiene registrado. Al volver de 5.2 a 5.1, el usuario vuelve a iniciar sesión.
En este momento, probablemente debería crear el problema aquí https://github.com/laravel/framework/issues y esperar la respuesta
EDIT2
Parece que es un comportamiento oficial y esperado porque se ha agregado la guía de actualización:
Debido a los cambios en el sistema de autenticación, cualquier sesión existente se invalidará cuando se actualice a Laravel 5.2.
Me di cuenta de lo que está haciendo que la sesión se invalide. El problema es el método getName()
del protector de sesión.
En 5.1.17:
return ''login_''.md5(get_class($this));
En 5.2 ( $this->name
sería web
por defecto):
return ''login_''.$this->name.''_''.sha1(get_class($this));
Además, el nombre de la clase cambia de Guard
a SessionGuard
Si sustituyo este método por:
return ''login_''.md5(''Illuminate/Auth/Guard'');
Eso mantiene mis sesiones conectadas.
Esto es progreso pero no es una solución completa todavía. La solución real es actualizar todas las sesiones existentes con el nuevo nombre. Trabajaré en un script para completar esto y luego actualizaré mi respuesta.