parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Класс авторизации: проблемы с additional_fields

Sanja v.2 08.03.2005 19:46 / 08.03.2005 19:55

Либо я не замечаю очевидную ошибку, либо оно не работает...

Итак, прикрутил auth.p и sql.p (которые наисвежайшие, от 3 марта) к тестовому сайту под IIS5 и MSSQL 2000. Как и было рекомендовано, воспользовался прослойкой (my_auth.p), в которой буду перекрывать методы, чтобы не править сам auth.p

Корневой auto.p:
@USE
lib.p
mssql.p
my_auth.p

@auto[]
#  Параметры подключения к базе данных MSSQL:
$SQL.connect-string[odbc://Driver={SQL Server}^;
	Server=127.0.0.1^;
	Database=GFKForum^;
#	AutoTranslate=no^;
	UID=sa^;
	PWD=censored!^;
	App=Parser^;
	Language=English^;
	StatsLog_On=no^;
	QueryLog_On=no^;
	Regional=no^;
	Description=Parser^;
	Trusted_Connection=no^;
	ClientCharset=windows-1251^;
]

# создаем SQL объект через который будут происходить все обращения к SQL
$MAIN:pSQL[^mssql::init[$SQL.connect-string;$.is_debug(1)]]

# Подключаем класс авторизации:
^MAIN:pSQL.server{
	$auth[
		^my_auth::init[
			$cookie:CLASS;
			$form:fields;
			$.csql[$pSQL]
			$.timeout(1)
			$.event_lifetime(60)
			$.event_min_count(300)
			$.additional_fields[^table::create{select	update	field
last_name	last_name	last_name
first_name	first_name	first_name
middle_name	middle_name	middle_name
YEAR(dt_birth)		dt_birth
photo}]
		]
	]
}
Класс-прослойка my_auth.p:
@CLASS
my_auth

@USE
auth.p

@BASE
auth

@init[icookie_data;ilogon_data;iparams]
^BASE:init[$icookie_data;$ilogon_data;$iparams]

########################################
# Переопределенный метод Logon
# @htmlFormLogon[in_params][lparams]
# ...
# ...
## End @htmlFormLogon

# коды ошибок
@getErrors[]
$result[^table::create{id	name
1	Вы не авторизовались
2	Вы не указали имя для регистрации
4	Выбранное вами имя уже существует
8	Вы не указали пароль
16	Введённые пароли не совпадают
32	Вы не указали Email-адрес
64	Похоже, что указанный вами Email неверен
128	Пользователь не наден
256	Найдено сразу несколько пользователей
32768	Неизвестная ошибка
}]
#end @getErrors[] 
В auth_mssql.sql добавил нужные столбцы. К себе, единственному пользователю, в поле first_name и last_name вписал букв от балды. Теперь вызываем тестовый файлик auth.html
@USE
my_auth.p

@main[]

<p>
	<b>Информация о пользователе:</b><br />
	Логин: $auth.user.name<br />
	Test1: $auth.first_name <br />
	Test2: $auth.last_name <br />
</p>
Вызываю http://127.0.0.1/auth.html?mode=debug и получаю:
Информация о пользователе:
Логин: Sanja
Test1:
Test2: Sanja
смотрю на последние две строки и удивляюсь. Лезу в sql.txt и нахожу там:

TYPE: table
EXECUTION TIME: 0 ms
MEMORY USAGE: 12 КБ/20 blocks
ROWS SELECTED: 1
QUERY:
SELECT auser_id AS user_id, name, email, description, rights, passwd, new_passwd, dt_register, dt_logon, dt_logout, connections_limit, event_type, last_name AS last_name, first_name AS first_name, middle_name AS middle_name, YEAR(dt_birth) AS dt_birth, photo FROM auser WHERE is_published = 1 AND auser_type_id = 0 AND auser_id != 0 AND auser_id = 3 ORDER BY dt_logon DESC


Копирую этот запрос и запускаю его вручную из ЭнтерпрайзМенеджера. Получаю

user_id name email rights passwd new_passwd dt_register dt_logon dt_logout connections_limit event_type last_name first_name middle_name dt_birth photo
--------
3 Sanja zzzzzz@bougakov.com 16777215 $apr1$9fl9gB5E$276NPIOYsIeu0rOZr1yhu/ NULL 08.03.2005 18:18:12 08.03.2005 19:26:49 08.03.2005 19:20:27 1 0 qwerty1 qwerty2 1900

( 1 row(s) affected)


Вопрос: каким образом в $auth.last_name попадает значение из $auth.user.name, а не законное "qwerty2"?

Вопрос №2 (маловажный, но уж коли пошли обсуждать класс авторизации): почему не срабатывает перекрытие метода @getErrors[] из auth.p методом @getErrors[] из my_auth.p?

  • Класс авторизации: проблемы с additional_fields, Sanja v.2 [M] 08.03.2005 19:46 / 08.03.2005 19:55