Forums / National / Russian / Тех. поддержка / Запросы документации

<<<1...5...10111213141516>>>

Принимаем вопросы от населения

Macik
#181 2013-10-04 12:12
#38099 Dayver:
function cot_check_xp()
{
	return (defined('COT_NO_ANTIXSS') || defined('COT_AUTH')) ?
		($_SERVER['REQUEST_METHOD'] == 'POST') : isset($_POST['x']);
}

Я конечно предполагаю, что подразумевается проверка «подлинности» формы. Но где здесь проверка на корректность самого «X». 
И более того мне не понятно что оно делает в такеом виде в page.admin.php

		cot_check_xp();

 

Точно не отвечу но проверка сама по себе происходит тут а в вышеуказанной функции видать уже идет проверка результата проверки в common.php

Да, про код в common.php я конечно знаю. Там и идет настоящая проверка.

Именно поэтому у меня и появилась мысль что это какое-то наследство от Seditio. Т.к. в Генуи эта же по сути функция. И нигде в нет вызовов этой ф-и.

https://github.com/macik
правильный хостинг — https://goo.gl/fjCa1F
Kabak
#182 2013-11-02 07:30

Здравствуйте,

Когда-то в 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 выводит сообщение:

This validation URL isn't valid.
Redirecting... 

и нужно вводить имя и пароль.

Посоветуйте пожалуйста как корректно пройти это место в плагине.

This post was edited by Kabak (2013-11-02 14:54, 10 years ago)
Trustmaster
#183 2013-11-02 15:29

Добрый день,

Примеры реализации такого поведения:

May the Source be with you!
Kabak
#184 2013-11-02 17:05

Спасибо за помощь. Заработало.

Есть ещё вопрос:

1) Каким образом при сохранении настроек плагина - нажатии админом кнопки обновить проверять валидность заполнения поля где хранится числовое значение ? Например, есть поле где должно быть число INT и ничего иного, и оно не должно превышать какого-то значения. Фактически защита от дурака, чтобы нельзя было в конфигурации плагина сохранить абы что. Как проверить валидность данных при нажатии кнопки сохранить/обновить?

This post was edited by Kabak (2013-11-04 09:11, 10 years ago)
bbcont
#185 2013-11-05 02:35
#38276 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 выводит сообщение:

This validation URL isn't valid.
Redirecting... 

и нужно вводить имя и пароль.

Посоветуйте пожалуйста как корректно пройти это место в плагине.

Приветствую, подскажи пожалуйста как реализовал автоматический вход на сайт после регистрации, что куда вставил и какой код, буду признателен очень сильно,  а то уже тоже бьюсь пол месяца все безуспешно :(

Kabak
#186 2013-11-05 10:50

Здравствуйте,

А тут разве никто не помогает ? Trustmaster же выложил конкретную ссылку на исходник.

Собственно, в плагине fbconnect есть код... с 47 по 82 строку и есть формирование правильного запроса на автовход. Придётся его чуть модернизировать под ваши нужды.

bbcont
#187 2013-11-05 11:18
#38325 Kabak:

Здравствуйте,

А тут разве никто не помогает ? Trustmaster же выложил конкретную ссылку на исходник.

Собственно, в плагине fbconnect есть код... с 47 по 82 строку и есть формирование правильного запроса на автовход. Придётся его чуть модернизировать под ваши нужды.

можете скинуть свой код, вы вот выше писали код он не работал, а как исправили?

Kabak
#188 2013-11-05 11:23
                    $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
#189 2013-11-05 13:12
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
#190 2013-11-05 13:38

Вы походу тупо вставляете код, а нужно посмотреть что такое у вас $row ?

 

перед вашим кодом неплохо бы ответ из базы получить.  ПРИМЕР:  ( в вашем случае, вероятно, нужно изменить )               

    $row = $db->query("SELECT * FROM $db_users WHERE user_lostpass='$v' AND (user_maingrp=4) LIMIT 1")->fetch();

 

bbcont
#191 2013-11-05 13:54
#38329 Kabak:

Вы походу тупо вставляете код, а нужно посмотреть что такое у вас $row ?

 

перед вашим кодом неплохо бы ответ из базы получить.  ПРИМЕР:  ( в вашем случае, вероятно, нужно изменить )               

    $row = $db->query("SELECT * FROM $db_users WHERE user_lostpass='$v' AND (user_maingrp=4) LIMIT 1")->fetch();

 

именно про quote пишет, там точно оно? даже не могу найти такой функции ни в одном документе движка

Kabak
#192 2013-11-05 14:51

call to a member function quote() on a non-object

Как переводится ?

$sid - что такое,  и откуда оно берётся ?  

Анализируйте код.

bbcont
#193 2013-11-05 15:23
#38331 Kabak:

call to a member function quote() on a non-object

Как переводится ?

$sid - что такое,  и откуда оно берётся ?  

Анализируйте код.

Вот смотрите:

$row['user_sidtime']

в базе нет такого поля, а вот $row['user_sid'] есть,

сид это же преобрзаование пароля из кодированного вида в нормальный

Остальные вроде все параметры есть

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;

 

хм, сделал, но вот почему-то после регистрации успешной автоматического выхода не получилось, в чем может быть проблема намекните хоть где я ошибся(

This post was edited by bbcont (2013-11-05 17:09, 10 years ago)
Kabak
#194 2013-11-05 19:22

Я не нашёл в моей версии Cotonti cotonti-0.9.14.7z    запросов sed_sql_query.

Я давал ва пример кода для версии Cotonti указаную выше в этом ответе. Вероятно, есть разница ... 

Dr2005alex
#195 2013-11-05 20:04

В сиене уже нет функций с префиксом sed_  , большенство функций имеют аналоги но с префиксом cot_ это можно увидеть в файле functions.php

Что касается sed_sql_query

то уже необходимо использовать $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

<<<1...5...10111213141516>>>