Проблема Laravel с пользователями, которые отключены, все еще могут входить в систему

#php #laravel #laravel-middleware

#php #laravel #laravel-промежуточное программное обеспечение

Вопрос:

Проблема проста, когда пользователь имеет в столбце таблицы `isBlocked` значение 1, не может войти в систему. Но в моем случае все еще может. Я надеюсь, что кто-нибудь найдет проблему, которую я не вижу

AppMiddlewareActiveUser.php

 <?php

namespace AppHttpMiddleware;

use IlluminateSupportFacadesAuth;
use Validator,Redirect,Response;
use Closure;

class ActiveUser
{
    public function handle($request, Closure $next)
    {
        if (auth()->check())
        {            
            if (auth()->user()->isBlocked == 1) 
            {
                auth()->logout();
        
                return response(view('expired'));
            }

        } 
    return $next($request);
    }
}
  

AppHttpKernel.php

 protected $routeMiddleware = [
....
'active_user' => AppHttpMiddlewareActiveUser::class,
];
  

web route

 Route::group(['middleware' => ['active_user']], function(){
    Route::get('user/{param1}amp;={param2}', 'AuthController@index')->name('login');
});
  

Комментарии:

1. Ваш код вообще попадает в auth()->check() условие? Я бы предложил добавить некоторые dd() и посмотреть, какое условие не выполняется. Другим предложением было бы очистить кэш вашего приложения и маршрута

2. @zlatan вы правы auth()->check() , не работает. Я заменяю на $user = $request->user(); и if (!$user || $user->isBlocked == 1) что-то делаю. большое спасибо

Ответ №1:

Я думаю, что проблема в вашем состоянии:

 if (Auth::user() amp;amp; Auth::user()->isBlocked == 1) {
    auth()->logout();
    // you can also abort that user from accessing web pages
    // App::abort(401);
    return response(view('expired'));

   
} else {
    return $next($request);
}