2017-07-20 8 views
1

私は、userとadminの2種類のログインフォームを用意しています。私が望むのは、ユーザーが自分のフォームでログインするだけで、それ以外の場合はエラーで、管理フォームでは同じでなければなりません。Laravel:ADMINとUSERのセキュリティ

私のデータベースには、userとadminの両方に1つのテーブルしかありません。彼らは明らかに "admin"と "user"であるuser_typeが異なるだけです

私がやっているのは、ユーザーが管理ログインフォームにログインしようとしたときです。「あなたはこの管理者ではありませんサイト'。しかし、それはユーザーがまだログインしていることを意味します。

私が欲しいのは、管理者のフォームでログインしようとしたときに、システムにアクセスしたくないということです。

ここでは、これまでに私のコード:

public function validateLoginResort(Request $requests){ 
$username = $requests->username; 
$password = $requests->password; 

$attempt = Auth::attempt([ 
'email' => $requests->username, 
'password' => $requests->password, 
    ]); 

    if(Auth::check()){ 
    if(Auth::user()->type_user == 'admin'){ 

     return redirect('home'); 
    } 
    else{ 
     Auth::logout(); 
     return redirect('login'); 
     } 
    }else{ 
    return "Invalid input"; 
    } 
} 

ユーザーが管理者でない場合、私はAuth::logoutを使用してみましたが、私はそれが安全と右のすべてであると思ういけません。

これを行うにはまだまだ良い方法があると思いますが、これを正しく実装する方法についての提案はありますか?ありがとう

+2

あなたはミドルウェア –

+0

内のコードをチェックし、ユーザーの役割を記述する必要がありますあなたは私与えることができます例? – JaneTho

+0

あなたは[middlewares](https://laravel.com/docs/5.4/middleware#introduction)を使うこともできますし、 'Auth :: attempt'の前に電子メールでユーザを見つけて、そのタイプが" admin "であるかどうかを確認することもできますそれは、 '試み'を使用して、それから 'check'それ以外の場合、ユーザーをリダイレクトします – Maraboc

答えて

0

ユーザーの種類を確認してから、ユーザーがadminの場合はログインできます。

ユーザーテーブル名を仮定は、「ユーザー」と雄弁なモデルに対応する「ユーザー」である、あなたはこれを行うことができます:

$user = User::where('email', $request->get('email'))->first();  
if (!$user || !\Hash::check($request['password'], $user->password)) { 
    return 'Invalid user credential'; 
} 

if ($user->type_user !== 'admin') { 
    return 'Only admin allowed'; 
} 

\Auth::login($user); // This is the key point. 
return redirect('home'); 
関連する問題