在中间件中,如何获取当前登录用户?

时间:2016-04-30 01:16:05

标签: laravel-5.2 laravel-routing laravel-middleware

我正在创建一个中间件,用于检查用户当前是否已登录并且是超级管理员。

这是我的中间件代码。

namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\Auth;

class CheckAdmin
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @param  string|null  $guard
     * @return mixed
     */
    public function handle($request, Closure $next, $guard = null)
    {
        if (Auth::guard($guard)->guest()) {

            // also need to check a field of user

            return redirect()->guest('login');
        } else {
            return $next($request);
        }
    }
}

实际上,它与默认的中间件Authenticate(即'auth')

相同

当我在应用程序的路由中使用它时,它运行良好。 (应用程序/ HTTP / routes.php文件)

我需要将它与cuddy plugin中间件选项一起使用。它应该只重定向访客用户,但事实并非如此。请帮忙!

2 个答案:

答案 0 :(得分:0)

默认情况下验证中间件是否检查用户是否为访客并将其重定向到登录页面,请参阅下面的

 if (Auth::guard($guard)->guest()) {
        if ($request->ajax() || $request->wantsJson()) {
            return response('Unauthorized.', 401); //if ajax request
        } else {
            return redirect()->guest('login'); //redirect
        }
    }

现在,如果您想检查用户是否已登录,请在此处查看一些用户字段

public function handle($request, Closure $next, $guard = null)
{
    if(Auth::check())  { //If is logged in
        $user = Auth::user();
        if($user->isSuperAdmin())
            return $next($request);
    }
    return redirect('/whatever');
}
  

如果你附上了#aut;'中间件+这个自定义中间件。你可以摆脱" Auth :: check()"在自定义中间件中。

Route::group(['middleware' => ['web', 'auth', 'custom']], function () {
   Route::get('/url/only/for/super/users', 'Whatever@whateverController');
});

 public function handle($request, Closure $next, $guard = null)
{
        $user = Auth::user();
        if($user->isSuperAdmin())
            return $next($request);
    return redirect('/whatever');
}

答案 1 :(得分:0)

laravel中有许多辅助函数可以在任何地方使用,例如auth()helper,see helpers。所以你可以在任何地方使用这个代码:

auth()->user();