簡體   English   中英

Laravel:僅針對經過身份驗證的用戶調用全局函數

[英]Laravel: call global function for only authenticated users

我只想為已通過身份驗證的用戶調用全局函數,以檢查其帳戶是否已通過驗證。 從所有路線

功能。

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'] 但我不能,因為該網站允許訪客和已驗證用戶。

任何幫助,將不勝感激。

您可以在app/Http/Middleware目錄中創建自己的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');
            }

       }
}

app/Http/Kernel.php注冊新的middleware

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

並在你的routes.php使用它:

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

    ////// Example:
    Route::get('myProtectedRoute', array('uses' => 'MyController@MyControllerFunction'))->name('myActionName'); 
});


Laravel很棒嗎? :-)

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

Route::group(['middleware' => ['verifyAccount'] function ()
{
    Route::get('dashboard', 'admin\AdminController@dashboard')->name('adminDashboard');
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM