5

私はCakeのWebサイトを持っており、2つの別々のログインが必要です。それぞれに独自のログインフォームがあり、異なるページが表示されます。2つのタイプの人々の間に類似点がないため、2つの異なるテーブルがあると便利です。

各ログインフォームは特定のユーザーのみが使用し、他のフォームにログインすることはありません。その逆も同様です。

また、2つのログインテーブルには関係があり、2つのテーブルが必要ですか?

これは可能ですか?

4

5 に答える 5

10

まず、空のカスタム認証オブジェクトをいくつか追加します。FormAuthenticateが使用するのと同じロジックを再利用します(つまり、POSTデータを使用してユーザーのデータベースをチェックします)が、オブジェクト設定内でモデルを変更するだけです(後で)。

app / Controller / Component / Auth / ModelOneAuthenticate.php

<?php
App::uses('FormAuthenticate', 'Controller/Component/Auth');

class ModelOneAuthenticate extends FormAuthenticate {
}

app / Controller / Component / Auth / ModelTwoAuthenticate.php

<?php
App::uses('FormAuthenticate', 'Controller/Component/Auth');

class ModelTwoAuthenticate extends FormAuthenticate {
}

次に、これらのオブジェクトを使用して認証するようにアプリに指示し、使用するモデルを指示します。ここでフィールドをカスタマイズすることもできます。AppControllerの場合:

public $components = array(
    'Auth' => array(
        'authenticate' => array(
            'ModelOne' => array(
                'userModel' => 'ModelOne',
                'fields' => array(
                    'username' => 'my_custom_username_field',
                    'password' => 'some_password_field'
                )
            ),
            'ModelTwo' => array(
                'userModel' => 'ModelTwo'
            )
        )
    )
);

最初の認証オブジェクトはmodel_onesテーブルでユーザー名my_custom_username_fieldとパスワードsome_password_fieldをチェックし、2番目の認証オブジェクトはmodel_twos標準usernamepasswordフィールドを使用してチェックします。

于 2012-06-21T21:50:48.490 に答える
2

これを行う最も簡単な方法は、ログインタイプごとに異なるセッションキーを設定することです。

if ($loginTypeOne) {
  $this->Auth->authenticate = array(
    'Form'=> array(
      'userModel'=> 'TypeOne',
      )
    );
  AuthComponent::$sessionKey = 'Auth.TypeOne';
} else {
  $this->Auth->authenticate = array(
    'Form'=> array(
      'userModel'=> 'TypeTwo',
      )
    );
  AuthComponent::$sessionKey = 'Auth.TypeTwo';  
}
于 2012-10-30T08:05:22.163 に答える
1

私は以前、BaseAuthenticateから拡張するカスタム認証コンポーネントを作成することでこれを行いました。それらがauthenticate()メソッドを実装している限り、さまざまなタイプのユーザーのそれぞれに対してやりたいことが何でもできます。

AppControllerで、次のような操作を行ってさまざまなコンポーネントを登録する必要があります。

    public $components = array(
    "Session",
    "Auth" => array(
        'authenticate'      => array("UserType1", "UserType2"),
    )
);

残りのクックブックをチェックしてください。

于 2012-06-21T13:21:31.340 に答える
1

ログインする必要がある場合、類似点があります。どちらも、資格情報(通常はユーザー名/電子メールとパスワード)を入力する必要があります。したがって、ユーザータイプに応じて、usersテーブルとfoo_profilesテーブルおよびbar_profilesテーブルも機能するはずです。

本当に2つの異なるテーブルとそれらのMVCスタックを使用したい場合は、2つの異なるコントローラーFooUsersとBarUsersを使用し、それぞれの内部でカスタマイズされたログインメソッドを作成します。

于 2012-06-21T09:21:44.870 に答える
0
You can have a look on this.
Define Model for both login member and then define table which you want to use for the user.
set variable in model.


class SearchedCategory extends AppModel {  
    var $name = 'SearchedCategory';  
    Var useTable = 'give your table name here.';
    var $primaryKey = 'id';


}
于 2012-11-26T05:49:59.123 に答える