Laravel: Если isActive Middleware возвращает false, я не могу войти с другим пользователем, пока не удалю куки - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть промежуточное ПО isActive, в котором я установил 1 на acitive и 0, когда пользователь не активен.

isActive.php inMiddleware folder look like this:

namespace App\Http\Middleware;

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

class IsActive
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if (Auth::check()) {
          if (Auth::user()->isActive()) {
            return $next($request);
          }
        }

        return redirect('/')->with('nonActive', 'Account is not active');
    }
}

, и у меня есть метод в модели пользователя:

public function isActive()
{
    if ($this->is_active == 1) {
        return true;
    }

    return false;
}

В ядре.php в защищенном $ routeMiddleware Я добавляю следующее:

'is.active' => \App\Http\Middleware\IsActive::class,

, и у меня есть промежуточное ПО группы в маршрутах, и все это прекрасно работает.

Но когда isActive Middleware возвращает false, я не могу войти сдругой пользователь.Всегда возвращайте false, как будто этот пользователь тоже неактивен, пока я не удалю куки.После удаления я могу нормально войти в систему с активным пользователем.

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

Ваша группа маршрутов:

Route::group(['middleware' => 'auth'], function () {
    // your active and auth user routes
});    

Если вы хотите, чтобы пользователь был активен для аутентификации, используйте глобальную область действия в вашей модели пользователя:

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Builder;

class User extends Model
{
    ...
    protected static function boot()
    {
        parent::boot();

        static::addGlobalScope('isactive', function (Builder $builder) {
            $builder->where('is_active', '=', 1);
        });
    }
    ...
}

Таким образом,пользователь не будет найден, если он не активен, и вам не понадобится промежуточное ПО IsActive.

Источник: https://laravel.com/docs/5.7/eloquent#global-scopes

Чтобы настроить ошибки проверки подлинности, переопределите sendFailedLoginResponse в вашем LoginController

protected function sendFailedLoginResponse(Request $request)
{
    return redirect('/')->with('nonActive', 'Account is not active');
}
0 голосов
/ 15 ноября 2018

Не перенаправляйте, если Auth :: check () возвращает false ..

Измените свою логику следующим образом:

    if (Auth::check()) {
      if (!Auth::user()->isActive()) {
        return redirect('/')->with('nonActive', 'Account is not active');
      }
    }

    return $next($request);

Вы также можете упростить это до одного оператора if.Вы также можете рассмотреть возможность выхода пользователя из системы до перенаправления.

...