2017-11-27 9 views
2

Laravel認証モジュールに問題があります。複数ユーザーテーブルの認証

古いツールをlaravelに書き換えていますが、古いシステムのDB構造を維持する必要があります。

システムでは、複数のDB(部門ごとに区切られた)を使用し、どのDBをurl、exで使用するかを認識します。

www.example.com/foo //use foo DB for foo department 
www.example.com/bar //use bar DB for bar department 

FooとBar DBには独自のユーザーテーブルがあります。両方のDBに存在するが、異なるIDを持つアカウントがいくつかありますが、ユーザー名は同じです。例:

//foo DB users table 
ID username 
1 xyz 
2 abc 

//bar DB users table 
ID username 
1 qwe 
2 xyz 

のは、私は、ユーザーXYZ(ID 1)としてのfoo deparment(およびDB)を使用してシステムにログインしていますことを言ってみましょう。

私は現在バー部門(およびバーDB)に切り替わります。

その結果、私はバー部門(およびDB)にユーザqweとしてログインしています。これは、システムがシステムにログインしているID(​​1)を使用し続けるためです。

この動作を変更して、idの代わりにusernameを使用して、DB間でユーザを識別しないようにするにはどうすればよいですか?

など私は、ユーザーモデルの主キーとしてユーザー名を使用することができることを知っているが、その後、私はユーザモデルとも認証のような他のものに接続されたすべての関係を変更する必要があります:: ID()

があります任意の簡単な方法ですか?

答えて

0

認証ガードは、このようにユーザーIDフィールドを参照してください。$user->getAuthIdentifier())

だから、あなたはあなたのUserモデルでこれを行うことができます:

class User extends Model { 
... 

    public function getAuthIdentifier() { 
    return $this->username; 
    } 
} 

あなたは認証の恐れている場合:: ID()

public function id() 
{ 
    if ($this->user()) { 
     return $this->user()->getAuthIdentifier(); 
    } 
} 

更新:

それはセッションガードの実装だ時の変更は、顔をしています

カスタム権限の問題を解決するには、独自のユーザープロバイダと認証ガードを使用することをお勧めします。

難しいかもしれませんが、2つのインターフェイスを実装するのと同じくらい簡単です。公式のドキュメントherehereをご覧ください。例として、vendor/laravel/framework/src/Illuminate/Auth/SessionGuard.php(途中でヘルパーの特性GuardHelpersをよく見てください)とvendor/laravel/framework/src/Illuminate/Auth/DatabaseUserProvider.php

を使用することができます
関連する問題