Залогинить пользователя из скрипта!

Автор lestat, 19 марта 2010, 23:54:35

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

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

lestat

Здравствуйте!
Возникла необходимость залогинить или отлогинить пользователя из php скрипта.
Вот, честно, не понимаю почему разработчики не сделали такую очевидную вещь как залогинить юзера по id или имени, мылу... ну или я плохо искал.

----- Небольшое отступление про регистрацию -----
Зарегистрировать юзера из скрипта у меня получилось так:
        function registerOSMUserInForum($username, $usermail, $userpass)
        {
            include_once('/forum/Sources/Subs-Members.php');
           
            $regOptions = array(
                'interface' => 'external',
                'username' => $username,
                'email' => $usermail,
                'password' => $userpass,
                'password_check' => $userpass,
                'check_reserved_name' => false,
                'check_password_strength' => false,
                'check_email_ban' => false,
                'send_welcome_email' => false,
                'require' => 'nothing',
                'memberGroup' => 0,
            );
           
            registerMember($regOptions, false);
        }

Тут должен заметить, что 'interface' => 'external' позволяет выполнять скрипт несколько раз... если ставить admin, то просит пароль, если гость, то не дает регистрировать двух и более юзеров подряд.

Вот я бы хотел найти такую функцию, которая позволит залогинить пользователя по его id из базы SMF.
Ну и функцию, которая отлогинит текущего пользователя... хотя такая вроде бы есть.

Находил функции для этих задач, которые были написаны на основе стандартного логина, но доверия они мне не внушают. Может есть что-нибудь стандартное? Ну или проверенное самопальное...

digger®

Цитата: lestat от 19 марта 2010, 23:54:35
Здравствуйте!
Возникла необходимость залогинить или отлогинить пользователя из php скрипта.
Вот, честно, не понимаю почему разработчики не сделали такую очевидную вещь как залогинить юзера по id или имени, мылу... ну

smf_api.php возьмите, если у вас SMF1

Vvva

Цитата: digger от 20 марта 2010, 00:33:24
smf_api.php возьмите, если у вас SMF1

а пример скрипта авторизации работающий с смф_апи можно ?)

Mavn

старую интеграцию друпала откапайте она построена на этом апи была
SimpleMachines Russian Community Team
п.1 Пройду курсы гадалок для определения исходного кода по скриншоту.

п.2 У вас нет желания читать правила раздела, у меня нет желания одобрять темы, которые не соответствуют этим правилам.

vooon

Я долго мучался с интеграцией своей cms в SMF. Перепробовал много вариантов и, надо сказать, все в общем-то работало.
После перехода на ветку SMF 2.0 ,опять пришлось переписывать скрипты. И вот к какому, самому логичному решению я пришел.
Использовать авторизацию юзера полностью средствами smf с дальнейшим редиректом на свою страницу.
Для этого в моем скрипте генерируется $_SESSION['rand_code']

if (!isset($_SESSION['rand_code']))
$_SESSION['rand_code'] = md5(session_id() . rand());

При условии, что сессии не хранятся в БД, а то придется использовать session_set_save_handler, что мне делать уже надоело.
Далее создаем script.js для хеширования пароля. Функции берем готовые из smf. hashLoginPassword(), hex_sha1(), php_to8bit(), php_strtolower()
И вот моя форма для регистрации:

<script language="JavaScript" type="text/javascript" src="js/script.js"></script>
<form method="post" action="http://___mysite.ru/forum/index.php?action=login2&backlink=$backlink"  accept-onsubmit="hashLoginPassword(this, '$session.rand_code');">
Логин: &nbsp; <input type="text" name="user" size="20" />
Пароль: &nbsp; <input type="password" name="passwrd" /><input type="hidden" name="hash_passwrd" value="" />
<div class="field"><input type="submit" value="Вход">
</form>


В переменной $backlink хранится ссылка на текущую страницу моего сайта. Например "news/548.html"
Далее берем Subs.php и правим функцию redirectexit():

function redirectexit($setLocation = '', $refresh = false)
{
global $scripturl, $context, $modSettings, $db_show_debug, $db_cache;

if (isset($_GET['backlink']) && !preg_match("/^[a-z]$/", strtolower($_GET['backlink']))) {
header('Location: http://___mysite.ru/'.$_GET['backlink']);
obExit(false);
}

Добавил три нижние строки.
Вот и вся магия.
Т.е. после регистрации пользователь переходит в место ввода логина и пароля, т.е. в http://___mysite.ru/news/548.html но уже как авторизованный пользователь. Может кому-то немного не понятно, общий смысл, думаю, понятен.


vooon

Цитата: digger от 20 апреля 2010, 20:09:07
А чем стандартный вариант средствами SSI не устраивает?

Тем, что только чтобы показать форму авторизации делается все это

require_once($sourcedir . '/QueryString.php');
require_once($sourcedir . '/Subs.php');
require_once($sourcedir . '/Errors.php');
require_once($sourcedir . '/Load.php');
require_once($sourcedir . '/Security.php');

+ куча функций.
Это все мне не нужно при каждой перезагрузке страницы моего сайта. Сильно влияет на время исполнения скриптов.