Авторизация на сайте и авторизация на форуме

Форум для авторов модов для phpBB 2.0.x. Здесь можно попросить помощи в разработке у коллег.

Авторизация на сайте и авторизация на форуме

Сообщение Descriptor 06.02.2005 13:35

Извините, может быть вопрос ламерский, но я бы хотел объединить авториацию на сайте и на форуме. При авторизации на сайте посылаются куки, которые потом читает форум.
Я хотел спросить у профессионалов: какие именно куки нужно, и что в них записать, чтобы форум потом при регистрации сессии все верно считал.
Спасибо.
Descriptor
phpBB 1.0.0
 
Сообщения: 6
Зарегистрирован: 06.02.2005 13:29


Сообщение [test] 07.02.2005 20:32

А я пробывал делать наоборот, использовать на сайте базу данных пользователей форума.
То есть логинился на форуме, а потом гулял по сайту с уже определенным пользователем.
Вот где-то такая схема была проверки на каждой странице, что требовали идентификации.

Кстати, может отцы подскажут, может я где накосячил в этой функции.

Код: Выделить всё
function Auth() {
   // do not retrive twice
   if (isset($GLOBALS['L_USER'])) return $GLOBALS['L_USER'];
   
   $result = array();
   $result['user_id'] = -1; // default we have anonymous user
   // check for session
   $cookieusersid = stripslashes($_COOKIE['phpbb2mysql_sid']);
   // check for saved session
   $cookiedata = unserialize(stripslashes($_COOKIE['phpbb2mysql_data']));

   if (!empty($cookiedata) and !empty($cookieusersid)) {
     // fetch active session
      $query = "SELECT session_user_id FROM forum_sessions
                     WHERE session_id='$cookieusersid' AND `session_logged_in`=1 LIMIT 1";
      $qresult = DBQuery($query);
      if (mysql_num_rows($qresult)) { // heh, user have a really good sessions
         $qdata = mysql_fetch_assoc($qresult);
         $result['user_id'] = $qdata['session_user_id'];
      };
      mysql_free_result($qresult);
   } else if (!empty($cookiedata) and !empty($cookiedata['autologinid'])) {
      // remembered session, we must validate password
      $cookiedata['autologinid'] = addslashes($cookiedata['autologinid']);
      $cookiedata['userid'] = (int)$cookiedata['userid'];
      $query = "SELECT `user_id` FROM forum_users
                     WHERE `user_id`='{$cookiedata['userid']}' AND
                              `user_password` = '{$cookiedata['autologinid']}' LIMIT 1";

      $qresult = DBQuery($query);
      if (mysql_num_rows($qresult)) { // nice, password is good
         $qdata = mysql_fetch_assoc($qresult);
         $result['user_id'] = $qdata['user_id'];
         mysql_free_result($qresult);
      };
   };
   // how retrieve data for current user
   $query = "SELECT f.*, permissions.* FROM forum_users f
                  LEFT JOIN site_permissions permissions ON f.user_id = permissions.p_user_id
                  WHERE f.user_id='{$result['user_id']}' AND f.user_active = 1 LIMIT 1";
   $qresult = DBQuery($query);
   if (mysql_num_rows($qresult)) {
      $result = mysql_fetch_assoc($qresult);
   };
   mysql_free_result($qresult);
  // correct getted values if needed
   if (empty($result['user_dateformat']) )   {
         $result['user_dateformat'] = $GLOBALS['settings']['defaultdatetime'];
      }   
   
   // Next line try to get ip address of user
   // they use $HTTP_SERVER_VARS['REMOTE_ADDR'], $HTTP_ENV_VARS['REMOTE_ADDR']
   // and if it failed $REMOTE_ADDR, $_SERVER["REMOTE_ADDR"]
  $result['user_ip'] = encode_ip( (!empty($HTTP_SERVER_VARS['REMOTE_ADDR']) ) ? $HTTP_SERVER_VARS['REMOTE_ADDR'] :
                                                (( !empty($HTTP_ENV_VARS['REMOTE_ADDR'])) ? $HTTP_ENV_VARS['REMOTE_ADDR'] :
                                                (((!empty($REMOTE_ADDR)) ? $REMOTE_ADDR : $_SERVER["REMOTE_ADDR"] ))) );

   $GLOBALS['L_USER'] = $result;
   return $result;
};
Аватара пользователя
[test]
phpBB 1.2.0
 
Сообщения: 17
Зарегистрирован: 07.02.2005 14:16

Сообщение Descriptor 07.02.2005 22:20

К сожалению наоборот невозможно в моем случае.
Просто у меня на сайте своя авторизация и переделывать ее не хотелось бы, так как на ней много чего завязано, а форум установлен только что и необходимо, чтобы человек, авторизированный на сайте, не был бы вынужден логиниться снова, заходя в форум.
Я понял, что при авторизации на сайте надо послать 2 куки с именами phpbb2mysql_sid и phpbb2mysql_data.
В phpbb2mysql_sid, согласно коду форума записывается md5(uniqid($user_ip));
А в phpbb2mysql_data, если я правильно понял, нужно записать целый массив, преобразованный до строчки. Но что за данные в этом массиве? И как его преобразовывать перед записыванием в куки?
Descriptor
phpBB 1.0.0
 
Сообщения: 6
Зарегистрирован: 06.02.2005 13:29

Сообщение [test] 08.02.2005 0:45

Descriptor
Нет, послать достаточно только "phpbb2mysql_sid", но тогда надо еще и сессию завести в таблице сессий.
а phpbb2mysql_data это если стояла галочка "Входить при каждом посещении", тогда phpbb сам начинает сессию, если где такое встречает.
и потом сам поставит "phpbb2mysql".
Мне кажется достаточно поставить одну куку.
Код: Выделить всё
$phpbb2mysql = serialize(array('autologonid' => md5($user_password), 'userid'=> $user_id))

насколько я помню, но могу ошибаться :(
Аватара пользователя
[test]
phpBB 1.2.0
 
Сообщения: 17
Зарегистрирован: 07.02.2005 14:16

Сообщение Descriptor 08.02.2005 2:10

[test] писал(а):Descriptor
Нет, послать достаточно только "phpbb2mysql_sid", но тогда надо еще и сессию завести в таблице сессий.

Это если на сессиях делать. можнои на сессиях конечно. знать бы - как.
[test] писал(а):а phpbb2mysql_data это если стояла галочка "Входить при каждом посещении", тогда phpbb сам начинает сессию, если где такое встречает.

Вот этого я и хочу.

Добавлено спустя 20 минут 11 секунд:

Ничего не выходит. Вот что я писал:

Код: Выделить всё
$sql1="SELECT user_id FROM phpbb_users WHERE main_user_id='$now_user_id' LIMIT 1";
$sql2=mysql_query($sql1);
$sql3=mysql_fetch_array($sql2);
$user_id=$sql3['user_id'];
$current_time=time();
$user_ip=$_SERVER['REMOTE_IP'];
$session_id = md5(uniqid($user_ip));
   
$current_time=time();
$sesssiondata = array();
   
$cookiename="phpbb2mysql_sid";
setcookie($cookiename, $session_id, $current_time + 31536000, "/", "", "0");
$sql1="SELECT user_password FROM phpbb_users WHERE main_user_id='$now_user_id'";
$sql2=mysql_query($sql1);
$sql3=mysql_fetch_array($sql2);
$user_password=$sql3['user_password'];
$sessiondata['autologinid']=$user_password;
$cookiename="phpbb2mysql_data";
setcookie($cookiename, serialize($sessiondata), $current_time + 31536000, "/", "", "0");
   
$phpbb2mysql = serialize(array('autologonid' => $user_password, 'userid'=> $user_id));
setcookie("phpbb2mysql", $phpbb2mysql, $current_time + 31536000, "/", "", "0");
[/list]
Descriptor
phpBB 1.0.0
 
Сообщения: 6
Зарегистрирован: 06.02.2005 13:29

Сообщение black_cat 08.02.2005 2:34

Descriptor писал(а):$sql1="SELECT user_id FROM phpbb_users WHERE main_user_id='$now_user_id' LIMIT 1";
$sql2=mysql_query($sql1);
$sql3=mysql_fetch_array($sql2);
$user_id=$sql3['user_id'];
$current_time=time();
$user_ip=$_SERVER['REMOTE_IP'];
$session_id = md5(uniqid($user_ip));

$current_time=time();
$sesssiondata = array();

$cookiename="phpbb2mysql_sid";
setcookie($cookiename, $session_id, $current_time + 31536000, "/", "", "0");
$sql1="SELECT user_password FROM phpbb_users WHERE main_user_id='$now_user_id'";
$sql2=mysql_query($sql1);
$sql3=mysql_fetch_array($sql2);
$user_password=$sql3['user_password'];
$sessiondata['autologinid']=$user_password;
$cookiename="phpbb2mysql_data";
setcookie($cookiename, serialize($sessiondata), $current_time + 31536000, "/", "", "0");

$phpbb2mysql = serialize(array('autologonid' => $user_password, 'userid'=> $user_id));
setcookie("phpbb2mysql", $phpbb2mysql, $current_time + 31536000, "/", "", "0");


Нет такого поля, main_user_id, в таблице phpbb_users, посмотри повнимательнее.
Последний раз редактировалось black_cat 08.02.2005 12:31, всего редактировалось 1 раз.
black_cat
phpBB 1.0.0
 
Сообщения: 1
Зарегистрирован: 08.02.2005 2:21

Сообщение [test] 08.02.2005 3:15

Так между делом (в код не вникал), а я бы не ставил такие куки на время, только на текущий сеанс.

setcookie("phpbb2mysql", $phpbb2mysql, $current_time + 31536000, "/", "", "0")


А так основной вопрос написан выше.
И если ставишь data то _sid неставь, незавел ведь, все равно не совпадет.
Аватара пользователя
[test]
phpBB 1.2.0
 
Сообщения: 17
Зарегистрирован: 07.02.2005 14:16

Сообщение Descriptor 08.02.2005 14:45

Такое поле есть. Я его добавил и записываю туда то, что мне нужно, чтобы юзер нужный выделялся.
Я послал куки _data, но форум их не распознает все равно.
Descriptor
phpBB 1.0.0
 
Сообщения: 6
Зарегистрирован: 06.02.2005 13:29

Сообщение Егор Наклоняев 08.02.2005 15:29

Я послал куки _data, но форум их не распознает все равно.


Все он распознает, просто от шибко резвых в форуме стоит защита, вот она и срабатывает.

Значит так... Тем, кто хочет, чтобы после авторизации на сайте бродить по форуму, однозначно нужно создавать новую сессию и прописывать в куки номер сессии.
Внимательно читаем function session_begin
в файле includes/sessions.php

Тем, кто хочет сделать интеграцию:
Код: Выделить всё
define('IN_PHPBB', true);
$phpbb_root_path = './';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);
//
// Start session management
//
$userdata = session_pagestart($user_ip, PAGE_ALBUM);
init_userprefs($userdata);
//
// End session management
//



Sapienty Sat
Аватара пользователя
Егор Наклоняев
Moderator
 
Сообщения: 417
Зарегистрирован: 25.10.2004 3:27
Откуда: оттуда

Сообщение Descriptor 08.02.2005 21:57

То есть вставки этого кода после авторизации на сайте достаточно для заведения сесии? И соответствующая запись в таблице сесиий phpbb появится?

Вроде бы нет. Если так начинать сессию - то начнется сессия _анонимного_ юзера. А нужно - уже залогиненного.
Последний раз редактировалось Descriptor 09.02.2005 23:55, всего редактировалось 1 раз.
Descriptor
phpBB 1.0.0
 
Сообщения: 6
Зарегистрирован: 06.02.2005 13:29

Сообщение Antony 09.02.2005 16:01

Это все работает, если убрать все и оставить только HTML код, но у меня есть ещё и подключаемые(методом include) модули от CuteNews.
Так вот что я получаю
Код: Выделить всё
Warning: htmlspecialchars() expects parameter 1 to be string, object given in C:\server\www\Natali\news\inc\functions.inc.php on line 26

Как бы от этого избавиться??
Antony
phpBB 1.0.0
 
Сообщения: 3
Зарегистрирован: 07.02.2005 20:58

Сообщение gled 24.03.2005 17:26

Товарищи прошу прошения если вопрос ламерский

После вставки следующего кода

Код: Выделить всё
define('IN_PHPBB', true);
$phpbb_root_path = './';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);
//
// Start session management
//
$userdata = session_pagestart($user_ip, PAGE_ALBUM);
init_userprefs($userdata);
//
// End session management
//


установленные переменны сбрасываются
gled
phpBB 1.0.0
 
Сообщения: 4
Зарегистрирован: 23.02.2005 22:02
Откуда: Орел

Сообщение Михалыч 19.04.2006 14:21

Я думаю, может сделать так? Ничего не делать на сайте, а все изменения внести в програмный код форума.

В файле, "формирующем" заголовок страницы, прописать, например если есть кука User (которая ставится, при авторизации на сайте), то отправлять на страницу Входа.
Но, на странице входа прописать, чтобы он брал Логин и Пароль не из формы, а из БД, относительно куки User. Т.е. форма появляться не будет, сервер сам подставит значения Логина и Пароля и отправит пользователя обратно на страницу, но только уже авторизованным.

Как Вы думаете, сработает это? :?
Система АЗК - Система автоматического заполнения квитанций.
Михалыч
phpBB 1.2.0
 
Сообщения: 10
Зарегистрирован: 18.04.2006 12:05

Сообщение SpyzeR 26.01.2007 19:39

У меня такая проблемма, поставил форум phpBB-2.0.22, а старый полностью удалил, теперькак сделать так, чтобы при регистрации на сайте юзер регистрировался одновременно на форуме, и чтобы работали Приватные сообщения.
SpyzeR
phpBB 1.0.0
 
Сообщения: 1
Зарегистрирован: 24.01.2007 18:35

Сообщение seychas 02.02.2007 8:16

Авторизация на сайте давно уже реализована (средствами phpBB ессно). теперь проблема в следующем:
у сайта есть субдомены, меню у сайта и субдоменов одно. как изменить область видимости кук, чтобы юзер, вошедший на основной сайт, в то же время считался "зарегеным" и на субдоменах?
Хорошо там, где мы есть, а мы есть везде!
www.zaural.org - о г.Кургане и его предприятиях
www.ancestor.ru - Предки руси
seychas
phpBB 1.0.0
 
Сообщения: 1
Зарегистрирован: 25.01.2007 22:38


Вернуться в Для авторов (phpBB 2.0.x)

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0