2016-10-18 128 views
2

我有新鮮的Laravel 5.1發行版。 我開始的第一件事是擴展Guard類以實現我自己的身份驗證驅動程序。我對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')); 
      } 
     ); 
    } 

目前,我已經有一個用戶ID存儲在會話數組,我可以通過

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

但我想在會話管理中使用Laravel構建。 我試圖改寫Guarduser方法在我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 does not exist' –

回答

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

好吧,是的,它似乎夠奇怪了。我有自定義的Web應用程序,我添加了一個Laravel項目(只需將Laravel目錄放入自定義應用程序的根目錄中)。這就是我所擁有的。我可以在我的Laravel項目中通過'$ _SESSION ['user_id'];'訪問由定製應用程序提供的會話值。但無論如何,你的回答很有幫助,現在我發現這是我獲得這些價值的唯一現有方式。 –