2016-10-18 5 views
2

У меня есть свежий дистрибутив Laravel 5.1. Первым делом я начал расширять класс Guard, чтобы реализовать собственный драйвер auth. Я действительно новичок в Laravel. Итак, вот что я сделал до сих пор.Laravel 5.1 Сессии не работают

конфигурации/auth.php

'driver' => 'crm', 

Поставщики/AuthServiceProvider.php

public function boot(GateContract $gate) 
    { 
     Auth::extend(
      'crm', 
      function ($app) { 
       $model = $app['config']['auth.model']; 
       $provider = new EloquentUserProvider($app['hash'], $model); 

       return new CrmGuard($provider, $app->make('session.store')); 
      } 
     ); 
    } 

В настоящее время у меня уже есть идентификатор пользователя, хранящуюся в массиве сеанса, и я могу получить доступ к нему через

session_start(); 
$_SESSION['user_id']; 

Но я хочу использовать сборку Laravel в управлении сеансами. Я пытаюсь переписать user метод Guard класса в моем CrmGuard классе, и мне нужно, чтобы получить эти значения из сессии, я пытался как так

$id = $this->session->get('user_id');

и так

session('user_id')

Вот как я пытаюсь назвать метод user во время тестирования

Route::get('/', function() { 
    \Illuminate\Support\Facades\Auth::user(); 
    //return view('welcome'); 
}); 

Но он всегда возвращает NULL, что я сделал не так? Спасибо.

+0

Является ли этот маршрут покрыта 'web' промежуточного слоя? Вы можете быстро проверить с помощью 'php artisan route: list'. – TheFallen

+0

В нем говорится, что я использую промежуточное ПО 'auth', что я могу сделать? –

+0

Возможно, потому, что я добавил «middleware» => 'auth' на мой маршрут, потому что мне нужно, чтобы все маршруты были безопасными, но когда я добавляю «middleware» => «web», он говорит, что 'Class web не существует' –

ответ

0

водитель сессии Laravel выполнен немного немного разница, что PHP сессии, поэтому он не будет работать таким образом:

session_start(); 
$_SESSION['user_id']; 

Это магазин в файл (на стороне сервера) по deafualt (вы можете изменить этот драйвер) и просто выставить (на стороне клиента) запрос. Вместо того, чтобы использовать PHP сессии, использовать Laravel в сессионный Встроенный драйвер с \Session::get() и Session::put(), которые вы можете прочитать здесь:

https://laravel.com/docs/5.1/session

+0

Извините, если я не был достаточно ясен, но мне нужно использовать механизм сеанса 'php', потому что предоставляется значение' 'user_id'' другим приложением, а не тем, что я создал с помощью самого Laravel –

+0

Что означает: «потому что значение« user_id »предоставляется другим приложением»? Если это происходит из другого приложения, то вы никогда не доберетесь до нужного cookie сеанса. Он не оценивает, если это * Laravel * или нет. –

+0

ну, да, это кажется достаточно странным. У меня есть пользовательское веб-приложение, где я добавил проект Laravel (только что разместил каталог Laravel в корневой каталог настраиваемого приложения). Это то, что у меня есть. И я могу получить доступ к значениям сеанса, предоставленным настраиваемым приложением '$ _SESSION ['user_id'];' в моем проекте Laravel. Но в любом случае, ваш ответ был полезен, теперь я вижу, что это единственный существующий способ получить эти ценности. –

Смежные вопросы