Как: вход в CakePHP без пароля? - PullRequest
2 голосов
/ 03 апреля 2011

Я пытаюсь найти способ авторизации пользователя без пароля.

Причина в том, что на моем сайте есть форумы phpBB3, и пользователи уже входят в систему. Поэтому я сейчас создаю расширение для сайта, чтобы иметь больше, чем просто форум (используя CakePHP). Я подумал, что я мог бы прикрепить автоматическое создание учетной записи к CakePHP, когда пользователь создает учетную запись на форумах (и, конечно, другую ссылку для существующих пользователей). Таким образом, пользователи получат учетную запись CakePHP с тем же именем пользователя, которое они зарегистрировали на форумах. Это означает, что единственный способ зарегистрироваться на CakePHP-сайте - сначала зарегистрироваться на форумах.

Теперь я хотел бы обработать всю логи с помощью входа в phpBB3, чтобы пользователи по-прежнему входили в форумы, а затем я прикреплял фрагмент кода, который также регистрировал бы их в CakePHP-части сайта с именем пользователя, которого они используется для входа на форумы.

Таким образом, я мог бы также помещать пользователей в их собственные группы ACL по их статусу на форумах.

Это то, что мне нужно, и мне нужно знать способ входа пользователей таким образом. Я не ищу полный код, я просто ищу ответ, который объясняет, как я регистрирую пользователей в CakePHP, когда у них вообще нет паролей.

Я также посмотрел http://bakery.cakephp.org/articles/wilsonsheldon/2009/01/13/phpbb3-api-bridge но это не совсем то, что я ищу ...

Ответы [ 3 ]

7 голосов
/ 04 апреля 2011

Насколько я помню, Auth требует две части информации для входа в систему.Вы можете изменить, какие поля в таблице пользователей проверяются аутентификацией с помощью.

$Auth->fields = array(
    'username' => 'username',
    'password' => 'password'
);

Так что если вы хотите, чтобы пользователи могли входить в систему в соответствии с их псевдонимом и размером обуви:

$Auth->fields = array(
    'username' => 'nickname',
    'password' => 'shoesize'
);

ВАЖНО:
AuthComponent ожидает, что значение пароля, хранящееся в базе данных, будет хэшировано, а не сохранено в открытом тексте.
(я думаю, что это sha1 пароля и Security.salt)

В приведенном выше примере, если какие-либо записи уже существуют в базе данных, вам нужно будет перезаписать поле размера обуви для каждого из них хэшированными версиями размеров обуви.

Чтобы сгенерировать хешированный пароль самостоятельно, выможно использовать $Auth->password('A Password');


Быстро и грязно

Если вы заполните поля пароля в таблице пользователей значением, возвращаемым: $Auth->password(null);

Тогда вы можете использовать следующее:

$Auth->login(
    array(
        'User'=>array(
            'username'=> USERNAME_FROM_PHPBB3,
            'password'=>null
        )
    )
);

Менее быстрое и грязное


При создании нового пользователя.Установите в поле пароля хэш md5 для некоторого случайного ввода.

$this->authUser[$this->User->alias][$Auth->fields['password']] = $Auth->password(md5(rand().rand()));

Используйте имя пользователя из phpBB3, чтобы получить соответствующую запись из таблицы пользователей в базе данных.

$this->authUser = $this->User->findByUsername( USERNAME_FROM_PHPBB3 );

Если запрос был успешным Войдите в систему пользователя

if($this->authUser){
    if($Auth->login($this->authUser)){
        // Login Successful
    }
}

0 голосов
/ 20 июня 2013

Эта функция решит вашу проблему:

public function forceLogin($userName = NULL) {
    $this->_setDefaults();

    $this->User = ClassRegistry::init('User');
    $this->User->recursive = 0;
    $user = $this->User->findByUsername($userName);

    if (!empty($user['User'])) {
        $this->Session->renew();
        $user['User']['id'] = null;
        $user['User']['password'] = null;
        $this->Session->write(self::$sessionKey, $user['User']);
    }

    return $this->loggedIn();
}
0 голосов
/ 03 апреля 2011

В вашем приложении cakephp вы можете проверить, существует ли пользователь в таблице форумов phpbb, и вы можете использовать сеанс phpbb, чтобы проверить, вошел ли пользователь в систему.

...