从中间件检查 Auth::user()

Check Auth::user() from middleware

如果用户通过调用 Auth::user() 进行了身份验证,我会尝试签入中间件 但它 returns 无效。我在 Kernel.phpprotected $middleware 部分的列表中最后调用这个中间件。有没有一种方法可以从中间件检查用户是否已通过身份验证或者我应该如何以其他方式进行检查?

补充:我正在使用 Zizaco Entrust。可能是它不起作用的原因 我正在使用 Laravel 5.5

我的app/HTTP/Kernel.php:

class Kernel extends HttpKernel
{
    /**
     * The application's global HTTP middleware stack.
     *
     * These middleware are run during every request to your application.
     *
     * @var array
     */
    protected $middleware = [
        \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
        \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
        \App\Http\Middleware\TrimStrings::class,
        \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
        \App\Http\Middleware\TrustProxies::class,
        \App\Http\Middleware\FirstLoginPasswordChange::class,
    ];

我的 FirstLoginPasswordChange 中间件:

use Illuminate\Support\Facades\Auth;
use Zizaco\Entrust\Entrust;

    public function handle($request, Closure $next)
    {
        dd(Auth::user()); // returns null
// or
        dd(Auth::check()); // returns false
// or
        dd(\Entrust::user()); // returns null

        return $next($request);
    }
}

要检查用户是否已通过身份验证,您可以按照 Laravel 文档所述进行操作:

use Illuminate\Support\Facades\Auth; //be sure to add the facade

if (Auth::check()) {
    // The user is logged in...
}

如果您正在尝试获取用户详细信息并执行一些逻辑,那么您可以在中间件中执行此操作:

{
/**
 * Handle an incoming request.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  \Closure  $next
 * @return mixed
 */
public function handle($request, Closure $next)
{


    $role = Auth::user()->role; //Obtenemos el rol del usuario

    if ($role != "user"){
        return redirect('/logout');
    }

    return $next($request);

}

}

通过将中间件从 Kernel.php 中的 protected $middleware 部分移动到 Kernel.php 中的 protected $routeMiddleware 部分来解决问题 使用本文: http://laraveldaily.com/password-expired-force-change-password-every-30-days/