1

私のAppControllerには、このセットアップがあります

public $components = array(
    'Acl',
    'Auth' => array(
        'authorize' => array(
            'Actions' => array('actionPath' => 'controllers')
        )
     ),
    'Session',
    'DebugKit.Toolbar'
);

私の User モデルには「username」フィールドがなく、「email」があるため、$components 構成を次のように変更しました。

public $components = array(
    'Acl',
    'Auth' => array(
        'authorize' => array(
            'Actions' => array('actionPath' => 'controllers')
        ),
        'authenticate' => array(
            'Form' => array(
                'fields' => array(
                    'username' => 'email', 'password' => 'password'
                )
            )
        )
    ),
    'Session',
    'DebugKit.Toolbar'
);

このようにして、「モデルに「ユーザー名」フィールドがありません」というエラーは表示されませんが、ログインは拒否されます。だから私は以前の構成に戻し、テーブルを変更しました

ALTER TABLE users CHANGE COLUMN username email VARCHAR(45) NOT NULL UNIQUE;

そして、それはうまくいきました..では、以前の構成の何が問題になっていますか?

4

1 に答える 1

0

わかりました、@Oldskoolのヒントのおかげで元に戻りました

public $components = array(
    'Acl',
    'Auth' => array(
        'authorize' => array(
            'Actions' => array('actionPath' => 'controllers')
        ),
        'authenticate' => array(
            'Form' => array(
                'fields' => array(
                    'username' => 'email', 'password' => 'password'
                )
            )
        )
    ),
    'Session',
    'DebugKit.Toolbar'
);

次に、ログイン ビューも変更しました (ユーザー名を電子メールに置き換えます)。

echo $this->Form->inputs(array(
  'legend' => __('Login'),
  'email',
  'password'
));

ログイン フォームは User モデルではなく auth コンポーネントによって管理され、ユーザー名と電子メールの間のマッピングは Auth コンポーネントの構成でのみ行われると考えました。

于 2013-03-26T13:49:39.747 に答える