【问题标题】:Check Auth::user() from middleware从中间件检查 Auth::user()
【发布时间】:2018-05-31 16:38:41
【问题描述】:

如果用户通过调用Auth::user() 进行身份验证,我会尝试签入中间件 但它返回null。我在Kernel.phpprotected $middleware 部分列表中将此中间件称为最后一个。有没有办法从中间件检查用户是否经过身份验证,或者我应该如何以另一种方式进行?

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

我的应用程序/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 laravel-5 laravel-middleware


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    要检查用户是否经过身份验证,您可以按照 Laravel Docs 的说明进行操作:

    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);
    
    }
    
    }
    

    【讨论】:

    • 我应该在哪里调用这个中间件?
    • @IlyaKolesnikov 直接进入您的中间件...只需记住在中间件顶部调用 use Illuminate\Support\Facades\Auth;,然后在中间件中调用您需要的函数。或者你能解释更多细节并从你的中间件粘贴代码吗?
    • 我正在使用 Zizaco Entrust。可能是它不起作用的原因
    猜你喜欢
    • 2015-06-29
    • 2021-11-28
    • 2020-07-12
    • 2018-01-08
    • 2015-03-11
    • 2022-10-02
    • 1970-01-01
    • 1970-01-01
    • 2020-10-03
    相关资源
    最近更新 更多