Laravel:仅为经过身份验证的用户调用全局函数

时间:2016-11-04 09:06:43

标签: php 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']用于我的路线。但我不能因为该网站允许访客和经过身份验证的用户。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

您可以在middleware目录中创建自己的app/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');
            }

       }
}

middleware内注册新的app/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' => 'MyController@MyControllerFunction'))->name('myActionName'); 
});


Laravel难道不是很棒吗? : - )

答案 1 :(得分:0)

您可以为此功能创建中间件..并创建路由组以检查所有路由。 例如

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