2016-08-15 79 views
0

我正在使用自定義中間件和自定義身份驗證進行會話檢查,發現$ request-> getSession()或Session :: get()不再有效。 在用戶控制器(登錄後),我使用的是:Laravel會話不能與自定義中間件一起工作

public function __construct() 
{ 
    $this->middleware('custom_authenticate'); 
} 

而且在自定義驗證器(不使用AUTH),我使用的是:

Session::put('user_id', $user->id); 
echo ">> " . Session::get('user_id'); // this gives the value stored in user_id 

這裏是我的自定義中間件:

<?php 

namespace App\Http\Middleware; 

use Closure; 
use Illuminate\Support\Facades\Session; 

class CustomAuthenticate 
{ 
public function handle($request, Closure $next) 
{ 
    $userId = Session::get('user_id'); 

    if (!isset($userId)) { 
     if ($request->ajax()) { 
      return response('Unauthorized.', 401); 
     } else { 
      return redirect()->guest('login'); 
     } 
    } 

    return $next($request); 
} 
} 

在中間件,不知從會議得到什麼::得到()

這裏是我的Kernel.php

protected $routeMiddleware = [ 
    'auth' => \App\Http\Middleware\Authenticate::class, 
    'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 
    'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 
    'custom_authenticate' => \App\Http\Middleware\CustomAuthenticate::class 
]; 
+0

我在我的上面代碼的應用程序測試。我通常得到$ userId。嗯.. – KmasterYC

回答

0

檢查已分組到你的路由中間件。

Route::group(['middleware' => 'custom_authenticate'], function() { 
     //list of all controllers action 
}); 

你甚至可以改變你的中間件動作如下

public function handle($request, Closure $next) 
{ 
    if(session()->has('user_id')){ 
     if ($request->ajax()) { 
      return response('Unauthorized.', 401); 
     } else { 
      return redirect()->guest('login'); 
     } 
    } 

    return $next($request); 

} 
相關問題