2017-01-25 5 views
1

私は複数のユーザーで構成され、ミドルウェアを使用して認証システムを作成したusersテーブルを持っています。今私は特定のユーザーだけがログインすることを許可する可能性があることを知っていると彼らのタイプに基づいて他のログインを防止する(つまり、私はすでにユーザーテーブル内のuser_type列を定義しました)Laravel 5は、ユーザータイプに基づいて特定のユーザーのみにログインできるようにします。

+0

はい、可能です。より具体的な回答を希望される場合は、あなたが望むものとすでに持っているものの詳細を記入してください。 – devk

+0

私が正しく覚えていれば、簡単に自分で作ることができます。laravel 5には、Auth/LoginController内のpostLogin関数とafterLogin関数が付属しています。これらの2つの関数で、独自のカスタムチェックを実行して、 – killstreet

答えて

0

カスタムAuth::attemptのフィールド:

class LoginController extends Controller 
{ 
    /** 
    * Handle an authentication attempt. 
    * 
    * @return Response 
    */ 
    public function authenticate() 
    { 
     if (Auth::attempt(['email' => $email, 'password' => $password, 'user_type'=>10])) { //<--- 
      // Authentication passed... 
     } 
    } 
} 

別の解決策は、彼/彼女が持っている権限をチェックし、利用者がログインし、許可されていない場合はログアウトを強制することです。

+0

LoginControllerにauthenticate()関数はありません。 __constructorにミドルウェアをロードする 'ゲスト'ミドルウェアしかありません –

+0

誰もがゲストでログインはしていませんか? –

+0

'LoginControllerはコントローラを拡張します { はAuthenticatesUsersを使用します; $ redirectTo = '/ viewspaces'を保護しました。 public function __construct() { $ this->ミドルウェア( 'guest'、['except' => 'logout']); } } –

0

これを試してください。

public function authenticate() 
{ 
    if (auth()->user()->user_type !== 1) { 
     auth()->logout(); 
    } 
} 

このコードは、ユーザーの種類を確認し、それが1がない場合には、認証されたユーザーをサインアウトするlogout()メソッドを使用します。

$allowed = User::join('user_types', 'user.id', '=', 'user_types.user_id') 
      ->where('user.email', $email) 
      ->where('user.password', $password) 
      ->where('user_types.type', 'admin') // the type of user 
      ->exists(); 

if($allowed) { 
    if (Auth::attempt(['email' => $email, 'password' => $password])) { 
     // passed 
    } 
    return 'not authorized'; 
} 
0

5.3では、あなたはLoginController.phpauthenticate()メソッドをオーバーライドすることができます。

+0

LoginControllerにはauthenticate()関数はありません。これは、__constructorにミドルウェアローディング 'ゲスト'ミドルウェアを持っています –

関連する問題