2

私のUsersテーブルにはたくさんのフィールドがあり、そのほとんどはAuth Userセッションに保存する必要がない/保存したくない. ログインしたユーザーのセッションに保存されるフィールドをどのように制限しますか?

「contain」キーで関連モデルのフィールドを選択できることは知っていますが、通常、最上位モデルのフィールドを選択するには、「fields」キーを使用します。しかし、Auth の場合、'fields' キーは、セッションに含めるフィールドではなく、ユーザーを認証するフィールドを選択するために使用されます。

コンテキストを示すために、これまでのコードを示します...ユーザーテーブルのすべてのフィールドではなく、メールとファーストネームのフィールドのみが認証セッションに保存されるようにするにはどうすればよいでしょうか。

$this->Auth->authenticate = array(
    'Blowfish' => array(
        'fields' => array(
            'username' => 'email',
            'password' => 'password',
        )
    )
);
4

3 に答える 3

2

回避策ではありますが、有用な回答に賛成しました-ありがとう。

「正しい」答えは、そのままの状態で CakePHP Auth コンポーネントを使用してこれを行う方法はなく、ハックする必要があるということだと思います (たとえば、以下のソリューションのいずれかを使用します)。_findUserBaseAuthenticate.phpのメソッドを調べたところ、これが確認されました。

CakePHP のコア開発者が (DeEuroMark?) を読んでいる場合、これはおそらくかなり一般的な要件であり、組み込む価値のある機能だと思います。

推奨される実装: 'fields' 配列に必要なフィールドを追加フィールドとして含めるだけで、'username' と 'password' 以外のすべてのキーは、認証セッションに含める必要がある追加フィールドであると仮定します。そうすれば、他のモデル検索構文と一貫性があります。

例:

$this->Auth->authenticate = array(
    'Blowfish' => array(
        'fields' => array(
            'username' => 'email',
            'password' => 'password',
            'another_field',
            'yet_another_field'
        )
    )
);
于 2013-06-25T07:18:05.327 に答える
0

最も簡単なのは、次のようなものを追加することだと思います。

Auth-Component構成にcontainを追加します

$this->loadComponent('Auth', [
        'authorize' => 'Controller',
        'loginRedirect' => [
            'controller' => 'Users',
            'action' => 'index'
        ],
        'logoutRedirect' => [
            'controller' => 'Users',
            'action' => 'login'
        ],
        'authenticate' => [
            'Form' => [
                'fields' => ['username' => 'email'],
                'contain' => ['Groups']
            ]
        ],
        'unauthorizedRedirect' => $this->referer()
    ]);
...

そして login-action でユーザーをセッションに保存します:

$foundUser = $this->Auth->identify();
if ($foundUser) {
    $this->Auth->setUser($foundUser);
}
...

これにより、含まれているグループが Auth.User に追加されます

これは CakePhp3 用です。古いバージョンでは異なる場合があります。

于 2015-05-05T08:25:22.340 に答える