Проверьте Auth :: user () из промежуточного ПО - PullRequest
0 голосов
/ 30 мая 2018

Я пытаюсь проверить в промежуточном программном обеспечении, аутентифицирован ли пользователь, вызвав Auth::user(), но он возвращает ноль.Я называю это промежуточное ПО последним в списке protected $middleware раздела в Kernel.php.Есть ли способ проверить из промежуточного ПО, аутентифицирован ли пользователь или как я должен сделать это по-другому?

Добавление: Я использую 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);
    }
}

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

проблема решена путем перемещения промежуточного программного обеспечения из раздела protected $middleware в Kernel.php в раздел protected $routeMiddleware в Kernel.php с использованием этой статьи: http://laraveldaily.com/password-expired-force-change-password-every-30-days/

0 голосов
/ 30 мая 2018

Чтобы проверить, аутентифицирован ли пользователь, вы можете сделать так, как утверждает 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);

}

}
...