2017-01-18 5 views
1

У меня проблема с файлом cookie. Мне нужно создать приложение, которое работает только с куки. В моей конфигурации сеанс не сохраняется в Laravel 5.2 с драйвером cookie. Если я использую файл , он работает.Laravel 5.2 session cookie driver

.env файл:

SESSION_DRIVER=cookie 

Я также создал промежуточное программное обеспечение, которое проверяет, является ли значение пользовательского сеанса существует (только handle() функция):

public function handle($request, Closure $next) 
{ 
    //dd(session('auth')) // null 
    if (!session('auth')) { 
     if ($request->ajax() || $request->wantsJson()) { 
      return response('Unauthorized.', 401); 
     } else { 
      return redirect('/'); 
     } 
    } 

    return $next($request); 
} 

Я добавил к промежуточному к $routeMiddleware массив в приложение/Http/Kernel.php:

'cookies' => \App\Http\Middleware\CheckCookies::class, 

Мои маршруты:

Route::group(['middleware' => ['web']], function() { 
    Route::get('/', '[email protected]'); 
    Route::post('login', '[email protected]'); 

    Route::group(['middleware' => 'cookies'], function() { 
     Route::get('home','[email protected]'); 
     Route::get('logout','[email protected]'); 
    }); 
}); 

Вот мой [email protected] метод:

public function login() 
{ 
    session([ 
     'auth' => ['name' => 'John Doe'] 
    ]); 

    return redirect('/home'); 
} 

Как я могу это исправить?

ответ

0

Просто используйте Cookie Фасады в ларавеле.

Cookie::queue('key', 'value', $minutes); 

Чтобы сделать печенье навсегда

Cookie::forever('key', 'value'); 

Измените код и попробовать это.

[email protected]

public function login(){ 
    $cookieValue=json_encode(array('name'=>'John Dow')); 
    Cookie::queue('auth', $cookieValue, 60); 
    return redirect('/home'); 
} 

CheckCookies Middleware

public function handle($request, Closure $next){ 

     if (!Cookie::get('auth')) 
     if ($request->ajax() || $request->wantsJson()) { 
        return response('Unauthorized.', 401); 
     } else { 
        return redirect('/'); 
     } 
     return $next($request); 
    } 
}