2016-11-04 34 views
1

我想爲僅經過身份驗證的用戶調用全局函數以檢查其帳戶是否已通過驗證。 來自所有路線Laravel:僅爲經過身份驗證的用戶調用全局功能

功能。

public function verifyAccount() 
{ 
    if (Auth::user()->verified == 0) 
    { 
     return redirect('/checkpoint'); 
    } 
    return redirect('/home'); 
} 

並且該函數當前在基礎路由中啓用。

Route::get('/', function() { 
    if (Auth::check()) { 
     UserService::verifyAccount(); 
    } 
    return redirect('/home'); 
}); 

我的問題是目前這隻適用於家庭/基地路線。我希望有一個更簡單的方法來實現所有路線,而不必手動複製並粘貼到每條路線。

我很樂意使用路線組功能['middleware' => 'auth']到我的路線。但我不能因爲該網站允許來賓和認證用戶。

任何幫助,將不勝感激。

+1

@tomloprod是一個更適合你想要實現的答案。我會回答他的答案。 – Andrew

+0

非常感謝您的支持 –

回答

2

您可以創建自己的middlewareapp/Http/Middleware目錄:

namespace App\Http\Middleware; 

use Closure; 

class VerifyAccount{ 

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

      if ($request->user()->verified) { 
       return $next($request); 
      } else { 
       return response('Unauthorized.', 401); 
       //////////// return redirect()->route('checkpoint'); 
      } 

     } 
} 

註冊新middlewareapp/Http/Kernel.php

protected $routeMiddleware = [ 
    ... 
    ... 
    'verifyAccount' => VerifyAccount::class 
]; 

而在你routes.php使用它:

Route::group(['middleware' => ['verifyAccount']], function() { 
    //////////// Here all your routes 

    ////// Example: 
    Route::get('myProtectedRoute', array('uses' => '[email protected]'))->name('myActionName'); 
}); 


Laravel不是很棒嗎? :-)

+0

您可以在'VerifyAccount'''handle'函數中進行任何更改以滿足您的需求。 – tomloprod

+1

廢話!有效。我只需要調整中間件來檢查用戶是否登錄。 –

+0

很高興幫助! – tomloprod

0

您可以爲此功能創建一箇中間件..並創建路由組以檢查所有路由。 例如

Route::group(['middleware' => ['verifyAccount'] function() 
{ 
    Route::get('dashboard', 'admin\[email protected]')->name('adminDashboard'); 
} 
相關問題