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');
});

我的问题是目前这只适用于home/base路由。我希望有一个更简单的方法来实现所有的路由,而不必手动复制和粘贴到每条路由。

我想使用路由组功能['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');
}