Механизм и концепция авторизации пользователей на сайте ("в ручную")
В google нашел коды для ручной авторизации пользователя:
PHP код:
Но почему при перезагрузке страницы $GLOBALS["TSFE"]->loginUser = 0; Как работать с концепцией авторизации пользователь на основе API typo3. И правильно ли понимаю что $GLOBALS["TSFE"]->loginUser в единицу нужно устанавливать самостоятельно, через постоянную проверку где-то вверху кода программы, а также группу пользователя также необходимо проверять каждый раз при перезагрузке страницы? Также пробовал на Wininstaller typo3 пакет Inducation. Авторизовался в системе - авторизация прошла успешно - но $GLOBALS["TSFE"]->loginUser упорно равен 0! |
Так понимаю что после сохранения сессии в БД выше приведенных кодом, необходимо проверять статус залогиннинности пользователя следующим кодом на каждой странице и там где требуется в контенте:
$user = tslib_eidtools::initFeUser(); $GLOBALS['TSFE']->loginUser = $user ? 1 : 0; $GLOBALS['TSFE']->fe_user = $user; :confused: |
Цитата:
Эта функция только для eID скриптов (там кстати нет $GLOBALS['TSFE'], поэтому присвоение чего-то $GLOBALS['TSFE']-> бессмысленно и приедет к warning). В FE плагинах можно просто проверить $GLOBALS['TSFE']->loginUser, он будет уже инициализирован на момент вызова вашего плагина. |
Что касается ручного логина в коде - а "обычный" у вас работает?
Если и он не работает, может быть проблема с сохранением кук в броузере, или с привязкой созданных кук к правильному домену. |
Полный код
Обычный работает.
Данный код у меня успешно работает только в google chrome. Opera и IE - не сохраняют как понимаю сессию. Суть кода - выводится форма авторизации пользователя если не залогинен и наоборот - если залогинин выводится формы выхода. PHP код:
Так понимаю это проблема в cookie - как можно их подправить? |
Хотя нет - причина в том, что данные не пишутся в таблицу fe_session!
|
Поменял на вот этот код и все заработало - сессии создаются...
$GLOBALS["TSFE"]->fe_user->user = $GLOBALS["TSFE"]->fe_user->fetchUserSession(); $GLOBALS['TSFE']->loginUser = 1; $GLOBALS['TSFE']->fe_user->start(); $GLOBALS["TSFE"]->fe_user->createUserSession($user); $GLOBALS["TSFE"]->fe_user->loginSessionStarted = TRUE; Единственное что осталось - это если закрыть браузер сессия разрывается. Необходима кнопка запомнить. |
В стандартной форме почему-то не работает:
"Display Remember Login Option" (Показать параметр о запоминании авторизации) |
Скажите, что именно вы хотите сделать. Возможно, мы скажем вам – как :)
|
В общем научился работать с сессиями для анонимных пользователей и авторизированных пользователей (прочитал здесь - http://www.koller-webprogramming.ch/...-mit-sessions/). С удивлением узнал, что если на любой странице передать через post user, pass и pid-хранилища записей пользователей - то произойдет аудентификация пользователя без всяких расширений и прочего.
С сессиями работаю так: PHP код:
Единственное что не могу понять, так как сделать так, что бы после входа в систему на основе кода который привожу в начале данной темы - запомнить этот вход на всегда... Т.е. что бы браузер закрыл и открыл и не приходилось входить по новой (аналог кнопки "Запомнить пароль"). |
Посмотрите системное расширение felogin, с удивлением узнаете что для формы логина не надо делать свой экст :)
И если в дополнение к user/pass передать permalogin=1, то логин будет сохраненным (как долго его ярдо запомнит, задается кажется в localconf.php). Причем все это можно передевать как GET, так и POST - все равно ядро пользователя авторизует. |
Подобное решение мне очень даже подходит и готов даже и не использовать выше описанный код (он даже и не нужен)...
Но есть одно НО. Вот форму создаю: <form> <input name="user"> <input name="pass"> <input name="permalogin" type="hidden" value=1> - запомнить вход пользователя (даже после закрытия открытия браузера) <input name="pid" type="hidden" value="id-хранилища записей пользователя"> <input type="hidden" name="logintype" value="login" /> И есть еще один параметр котрый , как понимаю, можно передать через hidden - это "redirect_url" Как понимаю - он должен перенаправить на указанную страницу в случае успешной авторизации (или возможно буду не прав) --- НО ОН У МЕНЯ ПОЧЕМУ-то не срабатывает - вход в систему есть, а ридеректа нет на заданную страницу... <input name="redirect_url" type="hidden" value="/index.php?id=303"> Как им возможно воспользоваться или такого параметра нет?:confused: </form> |
Вот как раз redirect_url и прочие вещи - это не из ядра. Ядро только производит логин/логаут и ничего более.
Это уже дополнительная функциональность которую предоставляет экст felogin (поищите redirect_url в felogin\pi1\class.tx_felogin_pi1.php). |
$check = FALSE;
$loginData = array( 'username' => "user", 'uident_text' => "pass", 'status' => 'login', ); $GLOBALS['TSFE']->fe_user->checkPid = ''; //do not use a particular pid $info = $GLOBALS['TSFE']->fe_user->getAuthInfoArray(); $info['db_user']['checkPidList'] = 1; $info['db_user']['check_pid_clause'] = 'AND pid IN(362)'; $user = $GLOBALS['TSFE']->fe_user->fetchUserRecord($info['db_user'], $loginData['username']); $login_success = $GLOBALS['TSFE']->fe_user->compareUident($user,$loginData); #Если пользователь найден if($login_success){ $GLOBALS['TSFE']->fe_user->createUserSession($user); $GLOBALS["TSFE"]->fe_user->loginSessionStarted = TRUE; $GLOBALS ["TSFE"] ->fe_user->start(); } Так понимаю в данном коде никак не получиться сохранить сессию на вечно?... |
Ну что же вы не проявляете любознательность? :)
Поиск "permalogin" по коду ядра дает что: 1. Можно задать в localconf.php $GLOBALS['TYPO3_CONF_VARS']['FE']['permalogin'] = 2 и включить permalogin глобально. 2. Можно задать его в своем коде перед ручным логином. 3. * Не рекомендую. Можно в конце концов задать permalogin в $_GET или $_POST Код:
typo3\sysext\cms\tslib\class.tslib_feuserauth.php |
В общем permalogin ни 0 ни 1 ни 2 не работает совсем...
Ни так ни так... Все равно закрываешь браузер и открываешь его по новому вводи пароль:( Даже попробовал на WinInstaller (TYPO3 4.7.0 - ни работает ни галочка, ни глобальная установка в 2) |
Время жизни кук прописали?
Код:
$TYPO3_CONF_VARS['FE']['lifetime'] = '2419200'; |
Вложений: 1
Вы правы... все работает на ура!
Картинка в приложении - что настроил... Пожалуй буду пользоваться простым созданием формы и передачей данных. А с редиректом на страницу приветствия что нибудь придумаюю... Спасибо. |
Как понимаю - это hook i для процесса авторизации
Хуки для авторизации...
$TYPO3_CONF_VARS['SC_OPTIONS']['t3lib/class.t3lib_userauth.php']['postUserLookUp']; $TYPO3_CONF_VARS['SC_OPTIONS']['t3lib/class.t3lib_userauth.php']['postUserL']; |
Да, есть хук на логин. Но он вызывается после успешного логина. Т.е. максимум что можно сделать - сохранить какую-то статистику или какие-то связанные с пользователем данные обновить.
Если вам интересно копнуть глубже, посмотрите на Auth Services. Они основаны на классе tx_sv_authbase (системный экст sv). Один из примеров в репозитории http://typo3.org/extensions/repository/view/eu_ldap Еще пример: http://jimsuperfly.de/blog/typo3-auth-service/ |
В настройках посмотрел, и как понял, что можно куки авторизации сохранять для двух доменов, а не для одного... Как это можно реализовать?:(:confused:
|
Цитата:
Из выше написанных расширений посмотрел, но не подошло. Авторизацию пользователя и его выход делаю стандартными способами: авторизация через форму user и pass, выход через logintype=logout Какими хуками можно решитть две задачи: Выполнить код после успешной авторизации пользователя Выполнить код после разлогинивания...? |
Часовой пояс GMT +4, время: 01:45. |
Работает на vBulletin® версия 3.8.1.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot