tutorial instalacion español ejemplos php laravel

php - instalacion - laravel tutorial



Laravel: el almacén de sesiones no está configurado bajo petición (10)

¿Puedes usar ->stateless() antes de ->redirect() ? Entonces ya no necesitas la sesión.

Recientemente creé un nuevo proyecto de Laravel y seguí la guía sobre Autenticación. Cuando visito mi ruta de inicio de sesión o registro, aparece el siguiente error:

ErrorException in Request.php line 775: Session store not set on request. (View: C:/Users/Matthew/Documents/test/resources/views/auth/register.blade.php)

No he editado ningún archivo principal de Laravel, solo he creado las vistas y agregado las rutas a mi archivo routes.php

// Authentication routes Route::get(''auth/login'', [''uses'' => ''Auth/AuthController@getLogin'', ''as'' => ''login'']); Route::post(''auth/login'', [''uses'' => ''Auth/AuthController@postLogin'', ''as'' => ''login'']); Route::get(''auth/logout'', [''uses'' => ''Auth/AuthController@getLogout'', ''as'' => ''logout'']); // Registration routes Route::get(''auth/register'', [''uses'' => ''Auth/AuthController@getRegister'', ''as'' => ''register'']); Route::post(''auth/register'', [''uses'' => ''Auth/AuthController@postRegister'', ''as'' => ''login'']);

No tengo mucha experiencia con Laravel, así que disculpe mi ignorancia. Soy consciente de que hay otra pregunta que hace esta misma pregunta, pero ninguna de las respuestas parece funcionar para mí. ¡Gracias por leer!

Editar:

Aquí está mi register.blade.php según lo solicitado.

@extends(''partials.main'') @section(''title'', ''Test | Register'') @section(''content'') <form method="POST" action="/auth/register"> {!! csrf_field() !!} <div class="ui input"> <input type="text" name="name" value="{{ old(''name'') }}" placeholder="Username"> </div> <div class="ui input"> <input type="email" name="email" value="{{ old(''email'') }}" placeholder="Email"> </div> <div class="ui input"> <input type="password" name="password" placeholder="Password"> </div> <div class="ui input"> <input type="password" name="password_confirmation"placeholder="Confirm Password"> </div> <div> <button class="ui primary button" type="submit">Register</button> </div> </form> @endsection


Deberá utilizar el middleware web si necesita estado de sesión, protección CSRF y más.

Route::group([''middleware'' => [''web'']], function () { // your routes here });


En mi caso (usando Laravel 5.3) agregar solo los siguientes 2 middleware me permitió acceder a los datos de la sesión en mis rutas API:

  • /App/Http/Middleware/EncryptCookies::class
  • /Illuminate/Session/Middleware/StartSession::class

Declaración completa ( $middlewareGroups en Kernel.php):

''api'' => [ /App/Http/Middleware/EncryptCookies::class, /Illuminate/Session/Middleware/StartSession::class, ''throttle:60,1'', ''bindings'', ],


En mi caso, agregué las siguientes 4 líneas a $ middlewareGroups (en app / Http / Kernel.php):

''api'' => [ /App/Http/Middleware/EncryptCookies::class, /Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse::class, /Illuminate/Session/Middleware/StartSession::class, /App/Http/Middleware/VerifyCsrfToken::class, ''throttle:60,1'', ''bindings'', ],

IMPORTANTE: ¡Las 4 líneas nuevas deben agregarse ANTES de ''acelerador'' y ''enlaces''!

De lo contrario, se generará el error "El token CSRF no coincide". He luchado en esto durante varias horas solo para encontrar que el pedido es importante.

Esto me permitió acceder a la sesión en mi API. También agregué VerifyCsrfToken ya que cuando se trata de cookies / sesiones, CSRF debe ser atendido.


Si agregar sus routes dentro del web middleware no funciona por alguna razón, intente agregar esto a $middleware en Kernel.php

protected $middleware = [ //... /Illuminate/Session/Middleware/StartSession::class, /Illuminate/View/Middleware/ShareErrorsFromSession::class, ];


Si está utilizando CSRF, ingrese ''before''=>''csrf''

En su caso Route::get(''auth/login'', [''before''=>''csrf'',''uses'' => ''Auth/AuthController@getLogin'', ''as'' => ''login'']);

Para obtener más detalles, consulte la documentación de Laravel 5 Rutas de protección de seguridad


Si la respuesta de Cas Bloem no se aplica (es decir, definitivamente tiene el middleware web en la ruta correspondiente), es posible que desee verificar el orden de los middlewares en su Kernel HTTP.

El orden predeterminado en Kernel.php es este:

$middlewareGroups = [ ''web'' => [ /App/Http/Middleware/EncryptCookies::class, /Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse::class, /Illuminate/Session/Middleware/StartSession::class, /Illuminate/View/Middleware/ShareErrorsFromSession::class, /App/Http/Middleware/VerifyCsrfToken::class, ], ];

Tenga en cuenta que VerifyCsrfToken viene después de StartSession . Si los tiene en un orden diferente, la dependencia entre ellos también puede hacer que el Session store not set on request. excepción.


Un problema puede ser que intente acceder a su sesión dentro de la función __constructor() de su controlador.

Desde Laravel 5.3+ esto ya no es posible porque no está destinado a funcionar de todos modos, como se indica en la guía de actualización .

En versiones anteriores de Laravel, podía acceder a las variables de sesión o al usuario autenticado en el constructor de su controlador. Esto nunca tuvo la intención de ser una característica explícita del marco. En Laravel 5.3, no puede acceder a la sesión o al usuario autenticado en el constructor de su controlador porque el middleware aún no se ha ejecutado.

Para obtener más información de antecedentes también lea Taylor su respuesta.

Solución alternativa

Si aún desea usar esto, puede crear dinámicamente un middleware y ejecutarlo en el constructor, como se describe en la guía de actualización:

Como alternativa, puede definir un middleware basado en Closure directamente en el constructor de su controlador. Antes de usar esta función, asegúrese de que su aplicación esté ejecutando Laravel 5.3.4 o superior:

<?php namespace App/Http/Controllers; use App/User; use Illuminate/Support/Facades/Auth; use App/Http/Controllers/Controller; class ProjectController extends Controller { /** * All of the current user''s projects. */ protected $projects; /** * Create a new controller instance. * * @return void */ public function __construct() { $this->middleware(function ($request, $next) { $this->projects = Auth::user()->projects; return $next($request); }); } }


en mi caso fue solo para devolver; al final de la función donde he establecido sesión


Laravel [5.4]

Mi solución fue usar el ayudante de sesión global: session ()

Su funcionalidad es un poco más difícil que $ request-> session () .

escritura :

session([''key''=>''value'']);

empujando :

session()->push(''key'', $notification);

recuperando :

session(''key'');