2017-07-10 1 views
2

自分の認証システムを持つ既存のPHPアプリケーションと並行して実行される新しいLaravelアプリケーション(v5.4)をビルドしています。既存のシステムに正常にログインしたユーザーは、Laravelアプリケーションで自動的に認証され、アプリケーション間でシームレスに移動できます。通常のLaravel認証プロセスをバイパスしてログインしたユーザーを設定する方法

私のLaravelアプリケーションは、既存のシステムのデータベースへの読み取り専用アクセス権を持ちます。そのため、PHPセッションがデータベースに記録されたセッションCookieと一致することを安全にチェックでき、ユーザーオブジェクトAuthのlogin()メソッドに渡します。

Authを承認された状態(ゲストではない)にする最も良い方法を知りたいのですが、そのようなコードを置くのに最適な場所はどこですか?

オプション私は、これまでのサンクました:

  • ミドルウェア:セッションをチェックして、いくつかのアプリケーション全体のミドルウェアから認証のログイン()メソッドを呼び出しますが?
  • Illuminate/Auth/SessionGuard.phpを拡張し、attempt()メソッドをオーバーライドしますか?もしそうなら、他のパーツに私の拡張SessionGuardを使用するように教えるにはどうしたらいいですか? (これは簡単に無効にすることはできません)
  • ユーザーのパスワードをランダムなハッシュに動的に設定し、バックグラウンドでAuth/LoginController @ login()を呼び出すという嫌なやり方で、ハッシュをパスワードフィールドとして使用します。 (私は真剣に、これは最も人気のある答えになってしまうしません願っています)
  • 他のいくつかのオプション(?)...あなたの助けを事前に

おかげSOコミュニティ!

答えて

0

私は最後に、この含まれているミドルウェア作成していたと走ったソリューション:

if (session_status() == PHP_SESSION_NONE) { 
    session_start(); 
} 

if (isSet($_SESSION['intranet_user_id']) && $_SESSION['intranet_user_id']) { 

    // Log them in manually 
    $intranet_user_id = $_SESSION['intranet_user_id']; 
    if (!Auth::guest() && Auth::user()->getId() !== $intranet_user_id) { 
     Auth::logout(); 
    } 

    if (Auth::guest()) { 
     Auth::login(User::find($intranet_user_id), true); 
    } 
} else { 
    Auth::logout(); 
} 
関連する問題