2016-11-04 71 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'); 
}