Yii:2つの異なるテーブルを使用して認証する方法

誰もが別のログインフォームを実行し、2つの異なるテーブルで認証する方法を知っていますか? 私は1つのテーブルと異なる役割に行くことができません...クライアントは別のテーブルを行うように要求...

私はYiiのフレームワークのログインシステムに基づいてユーザーのログインシステムを持っている。しかし、今は管理ユーザー(管理モジュール)のために別にする必要があります。

1

2 答え

この問題を解決する方法は、Yii Frameworkライブラリからこのプラグインの2つの同一コピーを作成することでした。

http://www.yiiframework.com/extension/yii-user/

その後、私はそれをリファクタリングし、それを "顧客"と呼び、別のテーブルなどを使用するように設定を変更しました。

Yiiの設定オプションでは、セッションを別々に保つためにこれらのオプションも用意しました(config/main.php):

'components' => array(
    ...
    'user' => array(
       //enable cookie-based authentication
        'allowAutoLogin' => true,
        'loginUrl' => array('/user/login'),
        'class' => 'RWebUser',//added - possibly uses the Rights user manager
    ),
    'customer' => array(
       //enable cookie-based authentication
        'allowAutoLogin' => true,
        'loginUrl' => array('/customer/login'),
        'stateKeyPrefix' => 'customer',
    ),
    'customerUser' => array(
        'class' => 'CWebUser',
        'stateKeyPrefix' => 'customer',
        'loginUrl' => array('/customer/login'),
    ),
2
追加された
あなたが気にしないなら、@ KieranAndrews私は欲しいです:)そしてあなたに感謝!
追加された 著者 PsychoX,
@KieranAndrewsこんにちは。あなたは私について覚えていますか? :)
追加された 著者 PsychoX,
@KieranAndrewsまたはあなたのブログにこのコードを公開したくない場合は、lukas.openid @ gmail.comに送ってもらえますか?
追加された 著者 PsychoX,
誰かが望むなら、リファクタリング/修正されたコードに私のブログのダウンロードリンクを提供できますか?
追加された 著者 Kieran Andrews,
まず、yii-userはユーザーが投稿した拡張子です.Yii Frameworkの一部ではありません です。第二に、ユーザーはyii-userで何を得ているのかを知る必要があります。それは著者によって放棄されたように見え、誰もそれを拾い上げたことはありません。問題のリストを見てください(50名が公開されていますが、ほとんどすべてがautohorによって見直されていません)。コードを最初に読んでください(たとえば、プロファイルモデルを見てください)。パスワード処理は非常に安全です。私はそれが多くの仕事を必要とし、最終的にはそれに値するものではないことが分かった。
追加された 著者 user213154,

You could add a property to your UserIdentity component called, for example, role. Then change the authenticate() method of UserIdentity so that it fetches from the account table corresponding to role. Now you need to make sure that UserIdentity->role is set before invoking UserIdentity->authenticate(). If you are following the yiic webapp template then this would be in SiteController. Two very easy ways (among others):

  1. Have two different login pages, one for normal users and one for admins and each has its own URL. Implement it with two views and two login action methods in SiteController, each sets up UserIdentity->role appropriately before invoking UserIdentity->authenticate(). This approach duplicates code and you'll be able to see how to sort that out once it's working.
  2. Use one login page with a form element (checkbox perhaps) that an admin user selects. This form's action method UserIdentity->role according to form state.
1
追加された