Принимаем вопросы от населения
| Macik |
|
|---|---|
#38099 Dayver:function cot_check_xp() Да, про код в common.php я конечно знаю. Там и идет настоящая проверка. Именно поэтому у меня и появилась мысль что это какое-то наследство от Seditio. Т.к. в Генуи эта же по сути функция. И нигде в нет вызовов этой ф-и. https://github.com/macik
правильный хостинг — https://goo.gl/fjCa1F |
| Kabak |
|
|---|---|
|
Здравствуйте, Когда-то в LDU был плагин который поднимал прошедшелу валидацию пользователю уровень до необходимого админу. Я хочу написать такой плагин для Котонти. Как правильно отработать и завершить hook users.register.validate.done чтобы дальнейшее выполнение кода в user.register.php, а именно
cot_auth_clear($row['user_id']);
if(!empty($token) && $token==$row['user_token'] && $sys['now']<($row['user_regdate']+172800))
{
cot_redirect(cot_url('login', 'a=check&v='.$v.'&token='.$token, '', true));
}
else
{
cot_redirect(cot_url('message', 'msg=106', '', true));
}
если я в моём плагине вот таким запросом
$sql = $db->update($db_users, array('user_maingrp' => NEWLEVEL), "user_id='".$row['user_id']."' AND user_lostpass='$v'");
поднимаю уровень, то дальнейшее выполнение кода в user.register.php выводит сообщение:
и нужно вводить имя и пароль. Посоветуйте пожалуйста как корректно пройти это место в плагине.
Отредактировано: Kabak (02.11.2013 14:54, 12 лет назад)
|
| Trustmaster |
|
|---|---|
|
Добрый день, Примеры реализации такого поведения:
May the Source be with you!
|
| Kabak |
|
|---|---|
|
Спасибо за помощь. Заработало. Есть ещё вопрос: 1) Каким образом при сохранении настроек плагина - нажатии админом кнопки обновить проверять валидность заполнения поля где хранится числовое значение ? Например, есть поле где должно быть число INT и ничего иного, и оно не должно превышать какого-то значения. Фактически защита от дурака, чтобы нельзя было в конфигурации плагина сохранить абы что. Как проверить валидность данных при нажатии кнопки сохранить/обновить?
Отредактировано: Kabak (04.11.2013 09:11, 11 лет назад)
|
| bbcont |
|
|---|---|
#38276 Kabak: Приветствую, подскажи пожалуйста как реализовал автоматический вход на сайт после регистрации, что куда вставил и какой код, буду признателен очень сильно, а то уже тоже бьюсь пол месяца все безуспешно :( |
| Kabak |
|
|---|---|
|
Здравствуйте, А тут разве никто не помогает ? Trustmaster же выложил конкретную ссылку на исходник. Собственно, в плагине fbconnect есть код... с 47 по 82 строку и есть формирование правильного запроса на автовход. Придётся его чуть модернизировать под ваши нужды. |
| bbcont |
|
|---|---|
#38325 Kabak: можете скинуть свой код, вы вот выше писали код он не работал, а как исправили? |
| Kabak |
|
|---|---|
$ruserid = $u['user_id'];
$rmdpass = $u['user_password'];
$token = cot_unique(16);
$sid = hash_hmac('sha256', $rmdpass . $u['user_sidtime'], $cfg['secret_key']);
if (empty($u['user_sid']) || $u['user_sid'] != $sid
|| $u['user_sidtime'] + $cfg['cookielifetime'] < $sys['now_offset']){
// Generate new session identifier
$sid = hash_hmac('sha256', $rmdpass . $sys['now_offset'], $cfg['secret_key']);
$update_sid = ", user_sid = " . $db->quote($sid) . ", user_sidtime = " . $sys['now_offset'];
}
else
{
$update_sid = '';
}
$db->query("UPDATE $db_users SET user_lastip='{$usr['ip']}', user_lastlog = {$sys['now_offset']}, user_logcount = user_logcount + 1, user_token = '$token' $update_sid WHERE user_id={$row['user_id']}");
// Hash the sid once more so it can't be faked even if you know user_sid
$sid = hash_hmac('sha1', $sid, $cfg['secret_key']);
$u1 = base64_encode($ruserid.':'.$sid);
if ($rremember){
cot_setcookie($sys['site_id'], $u1, time()+$cfg['cookielifetime'], $cfg['cookiepath'], $cfg['cookiedomain'], $sys['secure'], true);
unset($_SESSION[$sys['site_id']]);
}
else
{
$_SESSION[$sys['site_id']] = $u1;
}
|
| bbcont |
|
|---|---|
if ($cfg['regnoactivation'] || $defgroup==5)
{
$ruserid = $row['user_id'];
$rmdpass = $row['user_password'];
$token = sed_unique(16);
$sid = hash_hmac('sha256', $rmdpass . $row['user_sidtime'], $cfg['secret_key']);
if (empty($row['user_sid']) || $row['user_sid'] != $sid || $row['user_sidtime'] + $cfg['cookielifetime'] < $sys['now_offset']){
// Generate new session identifier
$sid = hash_hmac('sha256', $rmdpass . $sys['now_offset'], $cfg['secret_key']);
$update_sid = ", user_sid = " . $db->quote($sid) . ", user_sidtime = " . $sys['now_offset'];
}
else
{
$update_sid = '';
}
$db-sed_sql_query("UPDATE $db_users SET user_lastip='{$usr['ip']}', user_lastlog = {$sys['now_offset']}, user_logcount = user_logcount + 1, user_token = '$token' $update_sid WHERE user_id={$row['user_id']}");
// Hash the sid once more so it can't be faked even if you know user_sid
$sid = hash_hmac('sha1', $sid, $cfg['secret_key']);
$u1 = base64_encode($ruserid.':'.$sid);
if ($rremember){
sed_setcookie($sys['site_id'], $u1, time()+$cfg['cookielifetime'], $cfg['cookiepath'], $cfg['cookiedomain'], $sys['secure'], true);
unset($_SESSION[$sys['site_id']]);
}
else
{
$_SESSION[$sys['site_id']] = $u1;
}
sed_redirect(sed_url('message', 'msg=106', '', true));
exit;
}
Вроде бы уже под себя переделал, но выдает ошибку: call to a member function quote() on a non-object in....... user.register.inc.php на строке вот этой -
$update_sid = ", user_sid = " . $db->quote($sid) . ", user_sidtime = " . $sys['now_offset'];
В чем может быть проблема? Пользователь регистрируется, если ввести логин и пароль после! |
| Kabak |
|
|---|---|
|
Вы походу тупо вставляете код, а нужно посмотреть что такое у вас $row ?
перед вашим кодом неплохо бы ответ из базы получить. ПРИМЕР: ( в вашем случае, вероятно, нужно изменить )
$row = $db->query("SELECT * FROM $db_users WHERE user_lostpass='$v' AND (user_maingrp=4) LIMIT 1")->fetch();
|
| bbcont |
|
|---|---|
#38329 Kabak: именно про quote пишет, там точно оно? даже не могу найти такой функции ни в одном документе движка |
| Kabak |
|
|---|---|
Как переводится ?
Анализируйте код. |
| bbcont |
|
|---|---|
#38331 Kabak: Вот смотрите:
Остальные вроде все параметры есть Added 27 minutes later: буду рад узнать что такое $sid и как его правильно записать Added 1 hours later:
$rowi = sed_sql_query("SELECT * FROM sed_users WHERE user_name='$rusername' AND (user_maingrp=4) LIMIT 1");
$rowt = sed_sql_fetcharray($rowi);
$ruserid = $rowt['user_id'];
$rmdpass = $rowt['user_password'];
$token = sed_unique(16);
$sid = hash_hmac('sha256', $rmdpass . $rowt['user_lastlog'], $cfg['secret_key']);
if (empty($rowt['user_sid']) || $rowt['user_sid'] != $sid || $rowt['user_lastlog'] + $cfg['cookielifetime'] < $sys['now_offset']){
// Generate new session identifier
$sid = hash_hmac('sha256', $rmdpass . $sys['now_offset'], $cfg['secret_key']);
$update_sid = ", user_sid = "."'".sed_sql_prep($sid)."'".", user_lastlog = ".$sys['now_offset'];
}
else
{
$update_sid = '';
}
echo $usr['ip']."<br>";
echo $sys['now_offset']."<br>";
echo $token."<br>";
echo $update_sid."<br>";
echo "sidrime:";
echo $rowt['user_lastlog']."<br>";
echo "lllaaaast";
echo $rowt['user_id']."<br>";
echo "lastlog:";
sed_sql_query("UPDATE $db_users SET user_lastip='{$usr['ip']}', user_lastlog = {$sys['now_offset']}, user_logcount = user_logcount + 1, user_token = '$token'$update_sid WHERE user_id={$rowt['user_id']}");
// Hash the sid once more so it can't be faked even if you know user_sid
$sid = hash_hmac('sha1', $sid, $cfg['secret_key']);
$u1 = base64_encode($ruserid.':'.$sid);
if ($rremember){
sed_setcookie($sys['site_id'], $u1, time()+$cfg['cookielifetime'], $cfg['cookiepath'], $cfg['cookiedomain'], $sys['secure'], true);
unset($_SESSION[$sys['site_id']]);
}
else
{
$_SESSION[$sys['site_id']] = $u1;
хм, сделал, но вот почему-то после регистрации успешной автоматического выхода не получилось, в чем может быть проблема намекните хоть где я ошибся(
Отредактировано: bbcont (05.11.2013 17:09, 11 лет назад)
|
| Kabak |
|
|---|---|
|
Я не нашёл в моей версии Cotonti cotonti-0.9.14.7z запросов Я давал ва пример кода для версии Cotonti указаную выше в этом ответе. Вероятно, есть разница ... |
| Dr2005alex |
|
|---|---|
|
В сиене уже нет функций с префиксом sed_ , большенство функций имеют аналоги но с префиксом cot_ это можно увидеть в файле functions.php Что касается то уже необходимо использовать $db->query . т.е. пример первой строки $rowi= $db->query("SELECT * FROM sed_users WHERE user_name='$rusername' AND (user_maingrp=4) LIMIT 1"); а вместо $rowt= sed_sql_fetcharray($rowi); будет $rowt= $rowi->fetchAll(); или ($rowt= $rowi->fetch(); т.к. у нас лимит 1) сейчас все что связанно с базой находится в файле database.php WebKaa.ru - Cotonti Relax
|