Как отключить автоматический вход в систему в Laravel 5?

Я новичок в Laravel, но влюбился в рамки и решил использовать его для своего проекта.

У меня поле active и по умолчанию я установил его в 0 . В методе Attempt() я установил $credentials['active'] = 1 . Когда я выхожу из системы и снова вхожу в систему, это работает нормально.

Но когда я регистрирую пользователя, он автоматически регистрирует пользователя без проверки активного поля.

Я предполагаю, что вы используете свойство AuthenticatesAndRegistersUsers в своем контроллере.

Регистрация осуществляется методом postRegister() в этом признаке, который вызывает метод login() после создания нового пользователя.

Вы можете переопределить этот метод в своем контроллере и вызвать метод login() только тогда, когда active полем является true . Таким образом, ваш postRegister() будет выглядеть примерно так:

 public function postRegister(Request $request) { $validator = $this->registrar->validator($request->all()); if ($validator->fails()) { $this->throwValidationException( $request, $validator ); } $user = $this->registrar->create($request->all()); if ($request->get('active')) { $this->auth->login($user); } return redirect($this->redirectPath()); } 

В registersUsers.php замените строку:

 Auth::guard($this->getGuard())->login($this->create($request->all())); 

Со следующим:

 $this->create($request->all()); 

Это сработало для меня, я использую Laravel 5.2

Я бы не добавил добавление active поля к учетным данным – это проблема авторизации, а не аутентификация.

Для этого я использовал бы промежуточное программное обеспечение, чтобы проверить, активен ли вход в систему или неактивен. В 5.3 промежуточное ПО будет выглядеть так:

 <?php namespace App\Http\Middleware; use Closure; use Illuminate\Support\Facades\Auth; class RedirectIfInactive { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) { if ( $user = Auth::guard('web')->user() ) { if ( ! $user->active ) return redirect(route('account_inactive')); } return $next($request); } } 

Затем это промежуточное программное обеспечение должно быть зарегистрировано внутри Kernel.php :

 protected $routeMiddleware = [ 'auth' => \Illuminate\Auth\Middleware\Authenticate::class, 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class, 'can' => \Illuminate\Auth\Middleware\Authorize::class, 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 'inactive' => \App\Http\Middleware\RedirectIfInactive::class, ]; 

И, наконец, мы защищаем все наши маршруты:

 Route::get('inactive', ['as' => 'account_inactive', function () { return view('inactive'); }]); Route::group(['prefix' => 'admin', 'namespace' => 'Admin', 'middleware' => 'inactive'], function () { Route::get('/', ['as' => 'admin.home', 'uses' => 'AdminController@index']); }); 

Преимущество этого подхода состоит в том, что мы можем отобразить более релевантное сообщение об ошибке, чем общее «Эти учетные данные не соответствуют нашим записям», которые получают люди с плохими данными. Таким образом, пользователь знал бы, что это не их вина, они не могут войти в систему.

В любом случае, с подходом в принятом ответе, убедитесь, что вы сделали то же самое, когда пользователь успешно сбрасывает свой пароль, поскольку он также автоматически записывается в систему.