2017-10-30 20 views
1

私は上書きしましたログインログアウト機能このように、以下のようにユーザーを認証するためにさらに多くの条件を確認する必要があります。Laravel 5.5重複ログインを制限する

public function login(Request $request) 
{ 
     $this->validateLogin($request); 
     $input=$request->all(); 
     $user=User::where('username',$input['username'])->first(); 
     //If Temp Password is set 
     if(strlen($user->temp_password)>10) 
     { 
      if (Hash::check($input['password'], $user->temp_password)) 
      { 
       Auth::login($user); 
       $this->setUserSession($user); 
       $landing_page=Menu::find($user->landing_page); 
       return redirect()->route($landing_page->href); 

      } 
      else { 
       session()->put('failure','Invalid Username or Password'); 
       return redirect('/login'); 
      } 
     } 
     else{ //If Temp password is not set 
      if (Hash::check($input['password'], $user->password)) 
      { 
       Auth::login($user); 
       $this->setUserSession($user); 
       $landing_page=Menu::find($user->landing_page); 
       return redirect()->route($landing_page->href); 
      } 
      else { 
       session()->put('failure','Invalid Username or Password'); 
       return redirect('/login'); 
      } 
     } 
} 

ここで、同じユーザーを別の画面または場所で再度ログインから制限する必要があります。私はセッションデータをチェックしましたが、何もユーザーの一意ではありません。

ie。ユーザー名の管理者が米国にログインしている場合、同じユーザー名の管理者は、英国からログインできないようにしてください。

答えて

0

更新

ああbagga、質問は非常に明確ではありませんでした。セッション数を1に制限しようとしています。もし私がそれを取得したら、databaseセッションドライバを使用する必要があります。今は、デフォルトのドライバ(ファイル)を使用している可能性があります。同じブラウザ内のセッションだけをチェックします。データベースセッションを使用すると、どこからでもセッションを確認し、接続数を制限することができます。

まず、経路がwebミドルウェア内にあることを確認して、セッションにアクセスできるようにします。その後、ウェブミドルウェアの内部に、ログインしていないユーザーに対してのみアクセス可能なルートのグループを作成します。ユーザーでログイン

Route::group(['middleware' => 'guest'], function() { 
    Route::get('login', '[email protected]'); 
    // any other route 
}); 

はもうloginルートにアクセスすることはできません。

あなたはまた、ユーザーのはすでにthis->setUserSession($user)は何をしますか?

if (Auth::check()) { 
    // user is connected 
    // redirect them 
} 

を使用して接続されているかどうかを確認するためにあなたのログイン機能のチェックを行うことができますか

+0

いいえ、私の質問です。ユーザー名管理者が米国にログインしている場合、英国からの同じユーザー名管理者のログインは許されません。 –

+0

問題はそれについてはっきりしていなかった。私の更新をチェックしてください。 – EddyTheDove

+0

セッションデータベースを使用せずに行う必要があります。他の方法はありますか。 –

0

ログイントークンを使用してこれを行うことができます。

ログイントークンを生成し、データベースに保存します。 ログイン中にデータベースのエントリを確認してください。 存在しない場合は、ログインを成功させてください。 それ以外の場合は失敗します。

ユーザーがログアウトするたびにログイントークンを削除します。

または

ログインの成功ごとに新しいトークンを生成することができます。古いトークンを削除し、古いログインを無効にします。

しかし、この場合、トークンをセッション中に保持する必要があり、リクエストごとにトークンをデータベーストークンでチェックする必要があります。

一致する場合は、ユーザーを許可してください これ以外の場合は、ユーザーに通知してください。

私は第2の方法を個人的に好むでしょう。 ミドルウェア自体でトークンを確認できます。

関連する問題