2015-07-17 4 views
7

Ich bin neu bei Laravel, habe mich aber in das Framework verliebt und mich entschieden, es für mein Projekt zu verwenden.Wie deaktiviert man die automatische Anmeldung bei Registrierung in Laravel 5?

Ich habe ein Feld active und standardmäßig habe ich es auf 0 festgelegt. In der Attempt() Methode habe ich $credentials['active'] = 1 festgelegt. Wenn ich mich abmelde und mich erneut anmelde, funktioniert das einwandfrei.

Wenn ich jedoch einen Benutzer registriere, wird der Benutzer automatisch angemeldet, ohne das aktive Feld zu überprüfen.

Antwort

4

Ich nehme an, dass Sie die AuthenticatesAndRegistersUsers Eigenschaft in Ihrem Controller verwenden.

Die Registrierung wird von der Methode postRegister() in diesem Merkmal ausgeführt, die nach dem Erstellen eines neuen Benutzers die Methode login() aufruft.

Sie können diese Methode in Ihrem Controller überschreiben und die Methode login() nur aufrufen, wenn das Feld activetrue ist. Also, Ihr postRegister() Methode wird so etwas wie:

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

In registersUsers.php die Zeile:

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

Mit folgendem:

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

Das ist für mich gearbeitet, Ich benutze Laravel 5.2

+1

Es ist keine gute Idee, Kerndateien zu überschreiben. Sie können die Methode in Ihrem 'Auth \ RegisterController' überschreiben. Wenn es jemals ein Update gibt, wird es nicht löschen, was Sie angepasst haben. –

0

Ich würde vermeiden, das Feld active zu den Berechtigungsnachweisen hinzuzufügen - das ist ein Autorisierungsproblem und nicht ein Authentifizierungsfehler.

Dafür würde ich eine Middleware verwenden, um zu überprüfen, ob ein angemeldeter Benutzer aktiv oder inaktiv ist. In 5.3 würde die Middleware wie folgt aussehen:

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

Diese Middleware dann in Kernel.php registriert werden:

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, 
]; 

Und dann schließlich schützen wir alle unsere Routen mit ihm:

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' => '[email protected]']); 
}); 

Der Vorteil dieses Ansatzes ist natürlich, dass wir eine relevantere Fehlermeldung als die allgemeine anzeigen können 'Diese Anmeldeinformationen stimmen nicht mit unserem Datensatz überein ds 'dass Leute mit schlechten Auth Details bekommen. So würde der Benutzer wissen, dass es nicht ihre Schuld ist, dass sie sich nicht einloggen können.

Wie auch immer, mit dem Ansatz in der angenommenen Antwort, stellen Sie sicher, dass Sie dasselbe getan haben, wenn der Benutzer sein Passwort erfolgreich zurücksetzt, da sie auch automatisch sind. eingeloggt dann.

Verwandte Themen