2017-04-26 3 views
3

Ja, Sie haben das richtig gelesen. Lassen Sie mich erklären. Ich benutze den Standard-Authentifizierungs-Prozess, der mit Laravel 5.4 geliefert wird, und versuche, Administratoren die Möglichkeit zu geben, neue Benutzer zu registrieren. Ich habe die Middleware modifizierte RedirectIfNotAuthenicated Zugriff auf /register zu ermöglichen, wenn der Benutzer, der angemeldet ist admin (in meinem Fall, das heißt, sie eine Art von ‚1‘ hat):Melden Sie sich nach der Registrierung nicht an, wenn sich der Benutzer bereits angemeldet hat

public function handle($request, Closure $next, $guard = null) 
{ 
    if (Auth::guard($guard)->check()) { 

     if(!Auth::user()->type == '1'){ 
      return redirect('/'); 
     } 

    } 

    return $next($request); 
} 

Meine Frage nun wird, wie in die vorhandene RegisterController protokolliere ich den Benutzer nicht bei erfolgreicher Registrierung, wenn das Konto von einem Administrator erstellt wird. Offensichtlich beinhaltet dies eine Überprüfung, um zu sehen, ob der Benutzer gerade angemeldet ist und einen Admin, aber wo ich gehängt bin, ist nach diesem Block, wie für mich sieht es aus wie etwas, das woanders gemacht wird?

protected function create(array $data) 
{ 

    if(isset($data["director"])){ 
     $this->redirectTo = '/organizations/create'; 
    } 

    if(Auth::user()->type == '1'){ 

     //create the user and not log them in 

    } else { 

     return User::create([ 
      'first_name' => $data['first_name'], 
      'last_name' => $data['last_name'], 
      'email' => $data['email'], 
      'password' => bcrypt($data['password']), 
     ]); 

    } 

} 

Antwort

1

Zunächst müssen Sie den mit Laravel gelieferten RegisterController nicht verwenden, um Benutzer als admin zu erstellen. Egal, in welcher die Admincontroller Sie verwenden, können Sie den folgenden Code haben einen neuen Benutzer mit dem richtigen Validierung der Ursache zu erstellen:

User::create([ 
      'first_name' => $data['first_name'], 
      'last_name' => $data['last_name'], 
      'email' => $data['email'], 
      'password' => bcrypt($data['password']), 
     ]); 

Sie müssen nur die Benutzerdaten in den jeweiligen Tabellen bestehen bleiben und sobald der Benutzer anmeldet aus Frontend LoginController übernimmt den Rest.

Auch die mit Laravel ausgelieferte RegisterController verwendet RegistersUsers-Eigenschaft, die die zusätzliche Funktionalität hat, die Sie in der Steuerung bemerkt haben.

Illuminate\Foundation\Auth\RegistersUsers.php 
+0

Dies scheint der beste Weg, um die Situation zu behandeln. Ich habe der Standard-Registeransicht Logik hinzugefügt, die prüft, ob der Benutzer Gast oder Administrator ist, so dass er mit einem separaten Administrator-Controller wiederverwendet werden kann (wenn Admin auf eine andere Route schreibt). Mein Hauptanliegen war die Beibehaltung der gleichen Form an zwei verschiedenen Orten. – commanderZiltoid

Verwandte Themen