Como desativar o login automático no registro no Laravel 5?

Eu sou novo para Laravel, mas me apaixonei pela estrutura e decidi usar isso para o meu projeto.

Eu tenho um campo active e, por padrão, configurei-o para 0 . No método Attempt() , eu estabeleci $credentials['active'] = 1 . Quando eu sair e entrar novamente, isso funciona bem.

Mas quando eu registro um usuário, ele automaticamente registra o usuário sem verificar o campo ativo.

Eu suponho que você esteja usando o recurso AuthenticatesAndRegistersUsers em seu controlador.

O registro é carregado pelo método postRegister() nesse traço, que chama o método login() após a criação de um novo usuário.

Você pode replace este método no seu controlador e chamar o método login() somente quando o campo active for true . Então, seu método postRegister() será algo como:

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

Em registersUsers.php, substitua a linha:

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

Com o seguinte:

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

Isso funcionou para mim, eu uso Laravel 5.2

Eu evitaria adicionar o campo active às credenciais – isto é um problema de autorização em vez de uma autenticação.

Para isso, eu usaria um middleware para verificar se um usuário conectado estava ativo ou inativo. Em 5.3, o middleware ficaria assim:

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

Esse middleware deve ser registrado no 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, ]; 

E finalmente, nós protegemos todas as nossas rotas com ele:

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

A vantagem desta abordagem, é claro, é que podemos exibir uma mensagem de erro mais relevante do que o geral “Essas credenciais não combinam nossos registros” que as pessoas com detalhes de autenticação incorretos obtêm. Então, o usuário saberia que não é culpa dele não poder fazer logon.

De qualquer forma, com a abordagem na resposta aceita, assegure-se de ter feito o mesmo para quando o usuário reajustou com sucesso sua senha, pois também eles são registrados automaticamente.