2017-04-26 18 views
3

はい、その権利をお読みください。私に説明させてください。私は、laravel 5.4に付属しているデフォルトの認証プロセスを使用しており、管理ユーザーが新しいユーザーを登録できるようにしています。私がログインしているユーザは、(彼らは「1」のタイプを持っていることを意味し、私の場合)管理者であれば/registerへのアクセスを可能にするためのミドルウェアRedirectIfNotAuthenicatedを変更した:ユーザーが既にログインしている場合は、登録後にログインしないでください

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

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

    } 

    return $next($request); 
} 

私の質問は、今になると、どのように内既存のRegisterControllerは、アカウントが管理者によって作成されている場合、登録に成功した場合にユーザーをログインさせません。明らかに、これは、ユーザーが現在ログインしているかどうかを確認するためのチェックが必要になりますが、私はブロックされていますが、他の場所で行われているようなものです。

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

    } 

} 

答えて

1

まず、管理者としてユーザーを作成するために、実際にLaravelに付属のRegisterControllerを使用する必要はありません。あなただけの各テーブルにユーザーデータを永続化する必要がある

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

とからユーザがログインする度:何であなたが使用AdminControllerは、あなたが原因の適切な検証を持つ新しいユーザーを作成するには、次のコードを持つことができますfrontend LoginControllerは残りの部分を処理します。

また、Laravelに付属するRegisterControllerにはRegistersUsers Traitが使用されています。RegistersUsers Traitにはコントローラに追加された機能があります。

Illuminate\Foundation\Auth\RegistersUsers.php 
+0

これは状況を処理する最善の方法と思われます。私はユーザーがguestかadminかをチェックするデフォルトのレジスタビューにロジックを追加し、別の管理コントローラ(別のルートへの管理者投稿の場合)で再利用できるようにしました。私の主な関心事は、2つの別々の場所で同じフォームを維持することでした。 – commanderZiltoid

関連する問題