Перейти к контенту

Чтение email с внешней базы


Рекомендуемые сообщения

В функцию 

protected function _comparePasswords( $password, $remote_member ) даже не заходит


А если вывод поставить в самом начале функции и выводить $remote_member[ REMOTE_FIELD_PASS ] и $password ?

Пустые


В public function authenticate в начале вывел echo $password;  и получил то что вводил в поле пароля

Ссылка на комментарий
Поделиться на других сайтах

Ну значит идем по выходам.
 

if ( $this->is_admin_auth )

Это пропустим, логинимся же не в админку.
 

if ( ! $remote_member[ REMOTE_FIELD_NAME ] )

вот после этого можно эху вставить. Сработает, если имя пользователя не найдено в таблице внешней базы.
 

if ( ! $this->_comparePasswords( $password, $remote_member ) )

А это уже вызов нужной функции. 
Вот и получаем, что единственное место, где можно соскочить - это поиск юзера в базе.
 

select * from REMOTE_TABLE_NAME where REMOTE_FIELD_NAME = ИМЯ ЮЗЕРА 

Вот такой запрос. Значит надо бы перед ним вывести REMOTE_TABLE_NAME и REMOTE_FIELD_NAME, Получить конкретный запрос и выполнить его в mysql-клиенте, хотя и так будет видно, что собака роется в настройках подключения к внешней базе.


А еще, вы там не почту в качестве логина используете?
http://community.invisionpower.com/resources/bugs.html/_/ip-board/external-database-login-username-only-r42301

Ссылка на комментарий
Поделиться на других сайтах

Ну значит идем по выходам.

 

if ( $this->is_admin_auth )

Это пропустим, логинимся же не в админку.

 

if ( ! $remote_member[ REMOTE_FIELD_NAME ] )

вот после этого можно эху вставить. Сработает, если имя пользователя не найдено в таблице внешней базы.

 

if ( ! $this->_comparePasswords( $password, $remote_member ) )

А это уже вызов нужной функции. 

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

 

select * from REMOTE_TABLE_NAME where REMOTE_FIELD_NAME = ИМЯ ЮЗЕРА 

Вот такой запрос. Значит надо бы перед ним вывести REMOTE_TABLE_NAME и REMOTE_FIELD_NAME, Получить конкретный запрос и выполнить его в mysql-клиенте, хотя и так будет видно, что собака роется в настройках подключения к внешней базе.

А еще, вы там не почту в качестве логина используете?

http://community.invisionpower.com/resources/bugs.html/_/ip-board/external-database-login-username-only-r42301

Почту

Ссылка на комментарий
Поделиться на других сайтах

Во-первых надо добавить настройку, которая указывает на поле email  в удаленной базе.

А во-вторых

$remote_member = $RDB->buildAndFetch( array( 'select' => '*',
															'from'   => REMOTE_TABLE_NAME,
															'where'  => REMOTE_FIELD_NAME."='".$RDB->addSlashes($username)."' ".REMOTE_EXTRA_QUERY ) );
дополнить

$remote_member = $RDB->buildAndFetch( array( 'select' => '*',
															'from'   => REMOTE_TABLE_NAME,
															'where'  => REMOTE_FIELD_NAME."='".$RDB->addSlashes($username)."' AND ".REMOTE_FIELD_EMAIL."='".$RDB->addSlashes($email_address)."' ".REMOTE_EXTRA_QUERY ) );
IPS говорит о том, что модуль является скорее примером, нежели работающим "из коробки" решением. Подразумевается, что вы будете использовать модуль, как каркас.
Ссылка на комментарий
Поделиться на других сайтах

Во-первых надо добавить настройку, которая указывает на поле email  в удаленной базе.

А во-вторых

$remote_member = $RDB->buildAndFetch( array( 'select' => '*',
															'from'   => REMOTE_TABLE_NAME,
															'where'  => REMOTE_FIELD_NAME."='".$RDB->addSlashes($username)."' ".REMOTE_EXTRA_QUERY ) );
дополнить

$remote_member = $RDB->buildAndFetch( array( 'select' => '*',
															'from'   => REMOTE_TABLE_NAME,
															'where'  => REMOTE_FIELD_NAME."='".$RDB->addSlashes($username)."' AND ".REMOTE_FIELD_EMAIL."='".$RDB->addSlashes($email_address)."' ".REMOTE_EXTRA_QUERY ) );
IPS говорит о том, что модуль является скорее примером, нежели работающим "из коробки" решением. Подразумевается, что вы будете использовать модуль, как каркас.

 

Ругается на эту настройку AND ".REMOTE_FIELD_EMAIL

mySQL query error: SELECT * FROM users WHERE email='' AND REMOTE_FIELD_EMAIL='mail@yandex.ru' 

Спасибо всем, разобрался. Вместо $RDB->addSlashes($username) написал $RDB->addSlashes($email_address)

Ссылка на комментарий
Поделиться на других сайтах

В моем коде не AND а OR надо, я натупил.

 

Вообще, более универсальным решением будет такой блок в auth.php:
 

//-----------------------------------------
		// Get member from remote DB
		//-----------------------------------------
		if ($username) {
			$remote_member = $RDB->buildAndFetch( array( 'select' => '*',
															'from'   => REMOTE_TABLE_NAME,
															'where'  => REMOTE_FIELD_NAME."='".$RDB->addSlashes($username)."' ".REMOTE_EXTRA_QUERY ) );
		}
		else {
			$remote_member = $RDB->buildAndFetch( array( 'select' => '*',
															'from'   => REMOTE_TABLE_NAME,
															'where'  => REMOTE_FIELD_EMAIL."='".$RDB->addSlashes($email_address)."' ".REMOTE_EXTRA_QUERY ) );
		}

Добавить в acp.php

array(
'title' => 'Поле email в таблице',
'description' => "Поле таблицы удаленной базы, по которому будет проверяться email при авторизации на форуме",
'key' => 'REMOTE_FIELD_EMAIL',
'type' => 'string',
),
Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.

Гость
Ответить в этой теме...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.