2015-04-22 65 views
4

我試圖檢查輸入的URL是否與數據庫中認證的用戶slug相同。因此,如果用戶轉到example.com/user/bob-smith並且實際上是Bob Smith登錄,那麼應用程序會讓Bob繼續,因爲他在User表中的slu is是bob-smith。在中間件中使用Auth :: user

我有中間件註冊但是當我做

public function handle($request, Closure $next) 
    { 
     if($id != Auth::user()->slug){ 
      return 'This is not your page'; 
     } 
     else{ 
      return $next($request); 
     } 
    } 

我得到

級 '應用程序\ HTTP \中間件\驗證' 未找到

我不是確定如何在中間件內部使用這個。任何人都可以幫忙嗎?

回答

7

這很容易。看起來您並未導入Auth外觀的名稱空間。

因此無論是加

<?php namespace App\Http\Middleware; 

use Closure; 
use Illuminate\Support\Facades\Auth; // <- import the namespace 

class YourMiddleware { 
    ... 
} 

類聲明的上方或使用完全合格的類名在線

if ($id != \Illuminate\Support\Facades\Auth::user()->slug) { 

或者,你可以在構造函數中注入Guard例如

<?php namespace App\Http\Middleware; 

use Closure; 
use Illuminate\Contracts\Auth\Guard; 

class YourMiddleware { 

    protected $auth; 

    public function __construct(Guard $auth) 
    { 
     $this->auth = $auth; 
    } 

    public function handle($request, Closure $next) 
    { 
     ... 
     if ($id != $this->auth->user()->slug) { 
     ... 
    } 
} 
+0

Doh,我現在感覺有點傻,但是這個工作。謝謝。 –

相關問題