Принимаем вопросы от населения
Macik |
|
---|---|
#38099 Dayver:function cot_check_xp(){ return (defined('COT_NO_ANTIXSS') || defined('COT_AUTH')) ? ($_SERVER['REQUEST_METHOD'] == 'POST') : isset($_POST['x']); } Да, про код в 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 выводит сообщение:
и нужно вводить имя и пароль. Посоветуйте пожалуйста как корректно пройти это место в плагине. |
|
Dit bericht is bewerkt door Kabak (2013-11-02 14:54, 11 jaren ago) |
Trustmaster |
|
---|---|
Добрый день, Примеры реализации такого поведения:
May the Source be with you!
|
Kabak |
|
---|---|
Спасибо за помощь. Заработало. Есть ещё вопрос: 1) Каким образом при сохранении настроек плагина - нажатии админом кнопки обновить проверять валидность заполнения поля где хранится числовое значение ? Например, есть поле где должно быть число INT и ничего иного, и оно не должно превышать какого-то значения. Фактически защита от дурака, чтобы нельзя было в конфигурации плагина сохранить абы что. Как проверить валидность данных при нажатии кнопки сохранить/обновить? |
|
Dit bericht is bewerkt door Kabak (2013-11-04 09:11, 11 jaren ago) |
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;
хм, сделал, но вот почему-то после регистрации успешной автоматического выхода не получилось, в чем может быть проблема намекните хоть где я ошибся( |
|
Dit bericht is bewerkt door bbcont (2013-11-05 17:09, 11 jaren ago) |
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
|