|
|
12.01.2010, 10:11
|
|
Гость
Гость
|
Люди помогите!!!
Возникла следующая проблема, мне нужно вывести форму авторизауии на отдельную страницу, я это зделол путём копирования из модуля "Интерфейс пользователя" шаблон "Форма авторизации" меняя её дизайн, с этим проблем нету, форма отображается как положено.
Но после того как я пытаюсь ввести данные (неправельные) меня перекидывает на ту форму что в шаблоне модуля, причем без вывода ошибок о том что что-то онеправельно заполнено, хотя если помотреть файлик ru.lang.php там все ситуации заложены.
Как зделать чтобы после ввода неправельных данных выскакивало сообщение об ошибки, и оставалось на той странице на которой у меня форма это первое.
И второе, после того как авторизовался переносит на главную страницу тоже без каких либо сообщений, хотя в томже файлике ru.lang.php есть 'Авторизация прошла успешно. <a href='%s'>Вернуться</a>'
может я чтото не так настроил подскажите
|
|
|
12.01.2010, 11:40
|
|
Гость
Гость
|
со вторым разобрался, надобыло поменять в vars.inc.php в строчке $REDIRECT_STATUS = 'off'; с "on" на "off"
с первой проблемой так и неразобрался, для меня это есче загадка
|
|
|
12.01.2010, 13:21
|
|
Хыиуду
Зарегистрирован: 2009-10-21
Сообщений: 156
|
Распространенная проблема. А если еще средствами Javascript проверить правильность авторизации еще на той странице, на которой происходит проверка? Например, с помощью AJAX?
|
|
|
14.01.2010, 10:36
|
|
Гость
Гость
|
ну правельность заполнения формы зделат ьпроверку непроблема, а я так понял что ты имееш ввиду спомощью явы проверить пользователя в бд, я понятия неимею как это делается, я думл чт отакого с помощью явы нельзя делать, ежили есть пример такой формы дайте ссылочку глянуть
|
|
|
14.01.2010, 11:53
|
|
Хыиуду
Зарегистрирован: 2009-10-21
Сообщений: 156
|
Во-первых, не путаем Java и Javascript. У этих языков программирования нет ничего общего, кроме четырех букв. Во-вторых, тут не голый Javascript, а AJAX. Выглядит это так:
1. Создаем объект XMLHttpRequest, который может делать запросы к скриптам.
2. Прописываем яваскрипт: при нажатии на кнопку "Залогиниться", когда пользователь ввел логин и пароль, создается этот объект, берет из формы логин и пароль и отсылает их некоторому php-скрипту.
3. Этот скрипт получает логин и пароль, обращается к базе данных обычным образом и узнает, есть ли такой пользователь с таким паролем в БД. Возвращает некоторые данные в объект XMLHttpRequest.
4. Яваскрипт на стороне клиента получает эти данные и обрабатывает их.
Лично я работаю с Аяксом с помощью следующих оберток:
Цитата:function create_ajax($AjaxObject)
{
return "var $AjaxObject = false;
/*@cc_on @*/
/*@if (@_jscript_version >= 5)
try {
$AjaxObject = new ActiveXObject('Msxml2.XMLHTTP');
} catch (e) {
try {
$AjaxObject = new ActiveXObject('Microsoft.XMLHTTP');
} catch (e2) {
xmlHttp = false;
}
}
@end @*/
if (!$AjaxObject && typeof XMLHttpRequest != 'undefined') {
$AjaxObject = new XMLHttpRequest();
}
";
}
function query_ajax($AjaxObject, $url, $ResponceProcessFunction)
{
return "
// Создать URL для подключения
var url = $url;
// Открыть соединение с сервером
$AjaxObject.open('GET', url, true);
// Установить функцию для сервера, которая выполнится после его ответа
$AjaxObject.onreadystatechange = $ResponceProcessFunction;
// Передать запрос
$AjaxObject.send(null);
";
}
Первая функция создает нужный нам объект, вторая выполняет get-запрос с его помощью.
В Javascript-коде (который у меня генерится средствами php) это выглядит так:
Цитата:
<script>
".create_ajax('xmlHttp')." // Создали объект, назвали его xmlHttp
function callServer()
{
var login= document.getElementById('login').value;
var pass= document.getElementById('pass').value;
// Тут идут всякие проверки на валидность логина и т.д.
".query_ajax('xmlHttp', "'http://mysite.ru/reply_ajax.php?action=check_login&login=' + login+'&password='+pass", 'updatePage')."
//Здесь мы делаем запрос с помощью объекта по имени xmlHttp к скрипту reply_ajax.php на вашем сайте.
// Логин и пароль передаются в гете. Можно, конечно, и через POST сделать - так оно будет безопаснее с точки зрения безопасности.
//Или, например, пароль захешировать. В общем, не в этом сейчас вопрос.
// Еще мы указываем, что после получения ответа от скрипта мы запустим функцию updatePage
}
function updatePage() {
if (xmlHttp.readyState == 4) { //readyState=4 - значит, что ответ получен
var response = xmlHttp.responseText;
// Ну, а тут уж обрабатываем этот респонс как хотим
if (response=='1') alert('Неверный логин!');
elseif (response=='2') alert('Неверный пароль!');
elseif (response=='0') document.forms[0].submit();
}
}
Ну и, соответственно, сам php-скрипт, который будет проверять логин-пароль.
Цитата:
if ($_GET[action]=='check_login')
{
// Тут идет подключение к базе данных
$res=mysql_query("select * from users where login='".addslashes($_GET[login])."'");
if (mysql_num_rows($res)==0) // Нет такого логина
die("1");
$user=mysql_fetch_assoc($res);
if ($user[password]!=$_GET[password]) // Неправильный пароль
die("2");
else die("0");
}
Как-то так.
|
|
|
15.01.2010, 05:17
|
|
Гость
Гость
|
благадарю за пояснение, чет для меня пока эт тёмный лес, попробую найти другой спомоб
но тема с отправкой запросов серверу без перезагрузки страницы весьма интересная, какнибуть поразбираюсь
|
|
|
15.01.2010, 05:43
|
|
Гость
Гость
|
Я нашол решение, покапался в исходниках модуля авторизации (/netcat/modules/auth/), сама авторизация происходит в файле index.php, следующий код кокраз нам выводит поновой форму авторизации в информативной части страницы
Код:if (!$AuthPhase || !$IsAuthorized) {
eval("echo "$template_header";");
UserLoginForm();
eval("echo "$template_footer";");
}
и сама форма передаёт скрытый инпут
Код:<input type='hidden' name='REQUESTED_FROM' value='/index/'>
где value это страница с которой происходила авторизация
ну а дальше это дело техники, путем переписки первого кода что я выложил можно добится чтоб пользователь оставался всегда на той странице с которой начинал авторизацию, и этот пример тока для момента когда пользователь ввел неправельные данные, чуть ниже тог окода что я привел есть и условие на правельный ввод, там пожеланию тоже можно покапатся.
Пользуясь моментом хотел спросить, есть ли какаянибуть функция или глобальная переменная из которой можно былобы вытащить любые поля из тоблице по авторизованному в данный момент пользователю, $PHP_AUTH_USER выдаёт только лиш логин авторизованного пользователя
извиняюсь за граматику...
|
|
|
15.01.2010, 09:18
|
|
Хыиуду
Зарегистрирован: 2009-10-21
Сообщений: 156
|
$current_user
|