1

電子メール フィールドをユーザー名として使用するように CakeDC のユーザー プラグインを設定することは可能ですか?

デフォルトでは、Users プラグインにはユーザー名とメールの両方のフィールドがあり、すべてうまく機能します! しかし、認証用のユーザー名として電子メールを使用したいので、ユーザー登録を簡素化できます。

AppControllerに Auth コンポーネントをロードしてUsersAuthComponentをオーバーライドしようとしましたが、ログインが機能しなくなり、「間違ったユーザー名またはパスワード」と表示されます。

public function initialize()
{
    parent::initialize();
    $this->loadComponent('Flash');
    $this->loadComponent('Auth', [
        'loginAction' => [
            'plugin' => 'CakeDC/Users',
            'controller' => 'Users',
            'action' => 'login',
        ],
        'authenticate' => [
            'all' => [
                'scope' => ['active' => 1]
            ],
            'CakeDC/Users.RememberMe',
            'Form' => [
                'fields' => ['username' => 'email', 'password' => 'password']
            ]
        ],
        'authorize' => [
            'CakeDC/Users.Superuser',
            'CakeDC/Users.SimpleRbac',
        ],
        'storage' => 'Session'
    ]);

    $this->loadComponent('CakeDC/Users.UsersAuth');
}

ドキュメントに従って、bootstrap.phpのUsersAuthComponentもオフにしました。

Configure::write('Users.auth', false);

トリックはありますか?私はそれが可能だと信じていますか、それともバグですか?

私はCakePHP 3.1とCakeDC User plugin 3.1を使用しています

4

2 に答える 2

0

GitHub でプラグインを表示するだけで、MultiColumnAuthenticate が使用されるのはこれだと思います。次のようなことを試してください:

public function initialize()
{
    parent::initialize();
    $this->loadComponent('Flash');
    $this->loadComponent('Auth', [
        'loginAction' => [
            'plugin' => 'CakeDC/Users',
            'controller' => 'Users',
            'action' => 'login',
        ],
        'authenticate' => [
            'all' => [
                'scope' => ['active' => 1]
            ],
            'CakeDC/Users.RememberMe',
            'FOC/Authenticate.MultiColumn' => [
                'fields' => [
                    'username' => 'username',
                    'password' => 'password'
                ],
                'columns' => ['username', 'email'],
                'userModel' => 'Users',
            ]
        ],
        'authorize' => [
            'CakeDC/Users.Superuser',
            'CakeDC/Users.SimpleRbac',
        ],
        'storage' => 'Session'
    ]);

    $this->loadComponent('CakeDC/Users.UsersAuth');
}

これにより、ログイン時に電子メールとユーザー名の両方がチェックされます。

于 2015-11-02T23:07:31.413 に答える