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

Автор 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 раза.