CakePHP - компонент аутентификации, использующий другое имя таблицы и имя столбца - PullRequest
0 голосов
/ 29 марта 2012

Ради организации я хотел использовать другую таблицу для проверки компонента аутентификации, но он не совсем работает.Хотя вначале я могу заявить:

$this->Auth->userModel = "CoreUsers" плюс установите для свойства loginAction мой правильный MVC, чтобы посмотреть на эту таблицу, просто чтобы убедиться, что она есть, но логин не работает, он только продолжает возвращать неверный пароль,Что-то происходит в компоненте аутентификации;Я не могу сказать, что заставляет его терпеть неудачу.Когда я переименовываю свою таблицу в «Пользователи», она работает.

Другая часть заключается в том, что я бы предпочел использовать имя столбца «email», а не «username», так как это действительно то, что я использую.в любом случае.

Мне просто не повезло найти полный учебник и наборы справок, чтобы успешно выполнить оба этих действия с CakePHP 2.x.Какой путь вперед?

Ссылки:

  1. Вопрос переполнения стека Как использовать таблицу, отличную от "Users", для AuthComponent CakePHP?

  2. Вопрос переполнения стека CakePHP - «AuthComponent» с другим названием модели (не «Пользователь»)

(я искал ответы, но так и не получил полного ответа.)

Ответы [ 2 ]

2 голосов
/ 29 марта 2012

Убедитесь, что ваша таблица базы данных "core_users" и модель "CoreUser" существуют.

При настройке компонента вы можете поставить перенаправление входа / выхода из системы здесь.

var $components = array(
        "Auth" => array(
             'loginRedirect' => array('controller' => 'dashboard', 'action' => 'index'),
             'logoutRedirect' => array('controller' => 'core_users', 'action' => 'login')
              ),
       "Session");

Теперь в beforeFilter medhod вы можете поместить следующее

function beforeFilter(){
      $this->Auth->authenticate = array(
         AuthComponent::ALL => array('userModel' => 'CoreUser', 'scope' => array("CoreUser.status" => 1), "fields" => array("username" => "email", "password" => "your_password_field"), 'Form', 'Basic'
                                        );
}

В приведенном выше примере вы можете игнорировать статус, если вам нужно передать любую другую информацию о подтверждении входа в систему, которую вы можете использовать. Теперь о вы можете удалить «Basic», если вам нужна только проверка формы. Я надеюсь, что это сработает.

1 голос
/ 29 марта 2012

Во-первых, названия моделей, как правило, единичны.Вы уверены, что не имели в виду CoreUser, который будет выглядеть в таблице core_users?

Во-вторых, вы можете использовать поле email вместо username, установив клавишу fields наваши настройки аутентификации.

public $components = array(
    'Auth' => array(
        'authenticate' => array(
            'Form' => array(
                'userModel' => 'CoreUser',
                'fields' => array('username' => 'email')
            )
        )
    )
);

См. книгу для получения дополнительной информации.

...