Laravel 5.2登录时检查用户字段


Laravel 5.2 Checking user field on login

我花了一整天的时间试图找到最佳实践解决方案。在让用户查看任何其他页面之前,我想检查用户表中的布尔字段是否为true。

我使用的是内置于auth的Laravels,我已经尝试了许多已经存在堆栈溢出的解决方案,但它们都不起作用。

创建一个中间件。类似的东西:

<?php
namespace App'Http'Middleware;
use Closure;
use Auth;
use Redirect;
class UserHasField
{
    /**
     * Handle an incoming request.
     *
     * @param  'Illuminate'Http'Request  $request
     * @param  'Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if (Auth::user()->field === 0)
            return redirect()->route('named.route');
        return $next($request);
    }
}

现在将您的中间件类添加到kernel.php(在http中)文件夹:

protected $routeMiddleware = [
    ...
    'user_has' => 'App'Http'Middleware'UserHasField::class,
];

现在在你的路线中使用它,例如:

Route::group(['middleware' => ['user_has']], function () {
   ...
});

Oliver Queen拥有Laravel 5.0的正确/最佳实践和目的。

中间件的概念(正如Jeffrey Way所说)就像一个洋葱。它的目的是"在你到达控制器之前"你想做什么。Auth本身就像验证一样是一个中间件服务。

您所需要做的就是构造额外的中间件逻辑代码,以提取对该字段的额外检查,并接受/拒绝(如果存在)。

现在您已经声明"我必须针对所有控制器进行编码?"不,这就是中间件的美妙之处,您可以将它们作为一个组的一部分使用。

查看Matt Stauffer的解释:https://mattstauffer.co/blog/middleware-groups-in-laravel-5-2