Laravel-boutique Session non définie sur demande

j'ai récemment créé un nouveau projet Laravel et je suivais le guide sur L'authentification. Lorsque je visite mon chemin de connexion ou d'enregistrement, j'obtiens l'erreur suivante:

ErrorException in Request.php line 775:
Session store not set on request. (View: C:UsersMatthewDocumentstestresourcesviewsauthregister.blade.php)

Je n'ai pas édité les fichiers de base de Laravel, Je n'ai créé que les vues et ajouté les routes à mes routes.fichier php

// Authentication routes
Route::get('auth/login', ['uses' => 'AuthAuthController@getLogin', 'as' => 'login']);
Route::post('auth/login', ['uses' => 'AuthAuthController@postLogin', 'as' => 'login']);
Route::get('auth/logout', ['uses' => 'AuthAuthController@getLogout', 'as' => 'logout']);

// Registration routes
Route::get('auth/register', ['uses' => 'AuthAuthController@getRegister', 'as' => 'register']);
Route::post('auth/register', ['uses' => 'AuthAuthController@postRegister', 'as' => 'login']);

Je n'ai pas beaucoup D'expérience avec Laravel, alors veuillez excuser mon ignorance. Je sais qu'il y a un autre question demander la même chose, mais aucune des réponses ne semble fonctionner pour moi. Merci pour la lecture!

Edit:

voici ma caisse.lame.php comme demandé.

@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
73
demandé sur Community 2015-12-24 11:42:04

8 réponses

vous aurez besoin d'utiliser le web middleware si vous avez besoin de session state, CSRF protection, et plus.

Route::group(['middleware' => ['web']], function () {
    // your routes here
});
113
répondu Cas Bloem 2017-04-25 23:01:19

Si ajouter votre routes à l'intérieur du web middleware ne fonctionne pas pour n'importe quelle raison alors essayez d'ajouter ceci à $middleware dans Kernel.php

protected $middleware = [
        //...
        \Illuminate\Session\Middleware\StartSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
];
34
répondu Waiyl Karim 2016-02-14 15:52:59

dans mon cas (en utilisant Laravel 5.3) l'ajout seulement des 2 middlewares suivants m'a permis d'accéder aux données de session dans mes routes API:

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

déclaration complète ( $middlewareGroups dans le noyau.php):

'api' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Session\Middleware\StartSession::class,
            'throttle:60,1',
            'bindings',
        ],
21
répondu George Kagan 2016-12-12 19:40:21

si la réponse de cas Bloem ne s'applique pas (c.-à-d. que vous avez certainement le middleware web sur la route applicable), vous pourriez vouloir vérifier l'ordre des middlewares dans votre noyau HTTP.

l'ordre par défaut dans Kernel.php est le suivant:

$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,
    ],
];

notez que VerifyCsrfToken vient après StartSession . Si vous les avez dans un ordre différent, la dépendance entre eux peut aussi conduire à l'exception Session store not set on request. .

16
répondu Hugh Grigg 葛修远 2016-01-16 13:53:33

Laravel [5.4]

ma solution était d'utiliser l'aide de session globale: session()

sa fonctionnalité est un peu plus difficile que $request->session () .

écrit :

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

pousser :

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

"151940920 de" récupération :

session('key');
10
répondu izzaki 2017-07-26 21:39:20

un problème peut être que vous essayez d'accéder à votre session à l'intérieur de la fonction __constructor() de votre contrôleur.

de Laravel 5.3+ ce n'est plus possible car il n'est pas prévu de fonctionner de toute façon, comme indiqué dans le guide de mise à niveau .

dans les versions précédentes de Laravel, vous pouvez accéder aux variables de session ou l'utilisateur authentifié dans votre constructeur du contrôleur. Ce être jamais été destiné à être explicite d'une fonction de cadre. Dans Laravel 5.3, vous ne pouvez pas accéder à la session ou à l'utilisateur authentifié dans le constructeur de votre controller car le middleware n'a pas encore été lancé.

pour plus de renseignements généraux, lire aussi Taylor sa réponse.

contournement

si vous voulez toujours utiliser ceci, vous pouvez dynamiquement créer un middleware et l'exécuter dans le constructeur, comme décrit dans le guide de mise à niveau:

comme alternative, vous pouvez définir un middleware basé sur la fermeture directement dans le constructeur de votre contrôleur. Avant d'utiliser cette fonction, assurez-vous que votre application utilise Laravel 5.3.4 ou plus:

<?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);
        });
    }
}
5
répondu Daan 2017-08-18 14:20:59

dans mon cas, c'était juste pour mettre les retourner ; à la fin de la fonction où j'ai fixé la session

0
répondu Shawinder Jit Singh 2017-08-08 12:14:23

si vous utilisez CSRF entrez 'before'=>'csrf'

dans votre cas Route::get('auth/login', ['before'=>'csrf','uses' => 'Auth\AuthController@getLogin', 'as' => 'login']);

pour plus de détails voir la Documentation de Laravel 5 routes de sécurité

0
répondu Missaka Iddamalgoda 2018-09-09 18:54:10