Авторизация через скрипт

Автор imseor, 22 декабря 2010, 13:31:04

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

imseor

День добрый.

Ситуация следующая:

Есть скрипт, в нём логин\пасс юзера с форума. В этом скрипте подключаю SSI, вызываю метод recentPosts.
Цель: получить recentPosts для юзера чьи данные указаны в скрипте.

Это решаемо?

Спасибо за любую наводку.

digger®

Цитата: imseor от 22 декабря 2010, 13:31:04
День добрый.

Ситуация следующая:

Есть скрипт, в нём логин\пасс юзера с форума. В этом скрипте подключаю SSI, вызываю метод recentPosts.
Цель: получить recentPosts для юзера чьи данные указаны в скрипте.

Это решаемо?

Спасибо за любую наводку.

А у этого юзера последние сообщения чем-то отличаются от других?

imseor

Цитата: digger от 22 декабря 2010, 15:07:16
А у этого юзера последние сообщения чем-то отличаются от других?
Да, он не видит\видит некоторые разделы.


imseor

Цитата: digger от 22 декабря 2010, 15:25:23
ssi все данные отдает в соответствии с правами доступа пользователей.

Да, это я знаю. Но для этого надо зайти на форум под своим логин\паролем.
А необходимо именно со скрипта залогиниться и вытащить recentPosts для данного юзера.

digger®

Цитата: imseor от 22 декабря 2010, 15:29:06
Да, это я знаю. Но для этого надо зайти на форум под своим логин\паролем.
А необходимо именно со скрипта залогиниться и вытащить recentPosts для данного юзера.

Есть подозрение что штатными средствами так сделать не получится.

imseor

Цитата: digger от 22 декабря 2010, 15:53:52
Есть подозрение что штатными средствами так сделать не получится.

Очень жаль.

А может тогда знаете, можно ли из метода Login2() (который в LogInOut.php) взять кусок кода, который отвечает за:
- взятие логина\пароля
- внос кукисов и сессии
- инициализация переменных необходимых для адекватного срабатывания (т.е. в зависимости от юзера) recentPosts

Насколько я понял это всё происходит в том методе.

digger®

Цитата: imseor от 22 декабря 2010, 16:05:34
Очень жаль.

А может тогда знаете, можно ли из метода Login2() (который в LogInOut.php) взять кусок кода, который отвечает за:
- взятие логина\пароля
- внос кукисов и сессии
- инициализация переменных необходимых для адекватного срабатывания (т.е. в зависимости от юзера) recentPosts

Насколько я понял это всё происходит в том методе.

В LogInOut.php есть функция DoLogin(), нужно ее копать.

imseor

Цитата: digger от 23 декабря 2010, 00:58:43
В LogInOut.php есть функция DoLogin(), нужно ее копать.

Ага, уже докопался.
Отчасти в Login2() (там происходит поднятие юзера), и отчасти в DoLogin() (там поднятие кук).
Уже близок к решению конечной цели.

Спасибо большое, digger, за помощь.

digger®

Цитата: imseor от 23 декабря 2010, 11:54:38
Ага, уже докопался.
Отчасти в Login2() (там происходит поднятие юзера), и отчасти в DoLogin() (там поднятие кук).
Уже близок к решению конечной цели.

Спасибо большое, digger, за помощь.

Юзера можно опознать любым своим способом, потом набить массив $user_settings нужными данными и вызвать DoLogin().

Типа такого

  $request = $smcFunc['db_query']('', '
SELECT id_member, member_name, id_group, additional_groups, passwd, password_salt, is_activated
FROM {db_prefix}members
WHERE ...
LIMIT 1',
                  array()
  );

  $user_settings = $smcFunc['db_fetch_assoc']($request);
  $smcFunc['db_free_result']($request);

  DoLogin();

imseor

Ага, до этого и докопался.


   require_once(
$sourcedir . '/LogInOut.php');

   // Load the data up!
   $request = $smcFunc['db_query']('', '
   SELECT passwd, id_member, id_group, lngfile, is_activated, email_address, additional_groups, member_name, password_salt,
   openid_uri, passwd_flood
   FROM {db_prefix}members
   WHERE '
. ($smcFunc['db_case_sensitive'] ? 'LOWER(member_name) = LOWER({string:user_name})' : 'member_name = {string:user_name}') . '
   LIMIT 1'
,
   array(
   'user_name' => $smcFunc['db_case_sensitive'] ? strtolower($_REQUEST['user']) : $_REQUEST['user'],
   )
   );
   // Probably mistyped or their email, try it as an email address. (member_name first, though!)
   if ($smcFunc['db_num_rows']($request) == 0)
   {
   $smcFunc['db_free_result']($request);

   $request = $smcFunc['db_query']('', '
   SELECT passwd, id_member, id_group, lngfile, is_activated, email_address, additional_groups, member_name, password_salt, openid_uri,
   passwd_flood
   FROM {db_prefix}members
   WHERE email_address = {string:user_name}
   LIMIT 1'
,
   array(
   'user_name' => $_REQUEST['user'],
   )
   );
   // Let them try again, it didn't match anything...
   if ($smcFunc['db_num_rows']($request) == 0)
   {
   $context['login_errors'] = array($txt['username_no_exist']);
   return;
   }
   }

   $user_settings = $smcFunc['db_fetch_assoc']($request);
   $smcFunc['db_free_result']($request);

   $sha_passwd = sha1(strtolower($user_settings['member_name']) . un_htmlspecialchars($_POST['passwrd']));

   if ($user_settings['passwd'] != $sha_passwd)
   {return false;}else{
DoLogin(false);
   }


В DoLogin добавил параметр, смотря на который DoLogin делает редирект после логина или нет.
Мне редирект совершенно не нужен, поэтому false.

Это я запихнул в метод ssi_recentPosts. $_REQUEST['user'] и $_REQUEST['passwrd'] передаю в get запросе.
Теперь у меня возвращает recentPosts необходимого юзера. Надеюсь кому-нибудь ещё это поможет.

Кстати можно убрать кусок, где идёт проверка и с емайлом юзера. Кому не надо это. Код сократится в 2 раза.