Russian TYPO3 community Форум больше не используется. Присоединяйтесь к каналу #community-ru в Slack for TYPO3 community  

Вернуться   Russian TYPO3 community > Обсуждение общих технических вопросов > Общие вопросы

Ответ
 
Опции темы Опции просмотра
Старый 12.10.2012, 13:49   #1
Ивано
Guest
 
Сообщений: n/a
Question Механизм и концепция авторизации пользователей на сайте ("в ручную")

В google нашел коды для ручной авторизации пользователя:

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();
        

В результате его работы он находим у меня пользователя с заданными логином и паролем и заносит данные в mysql-таблицу fe_sessions
Но почему при перезагрузке страницы $GLOBALS["TSFE"]->loginUser = 0;

Как работать с концепцией авторизации пользователь на основе API typo3.
И правильно ли понимаю что $GLOBALS["TSFE"]->loginUser в единицу нужно устанавливать самостоятельно,
через постоянную проверку где-то вверху кода программы, а также группу пользователя также необходимо проверять каждый раз при перезагрузке страницы?

Также пробовал на Wininstaller typo3 пакет Inducation.
Авторизовался в системе - авторизация прошла успешно - но $GLOBALS["TSFE"]->loginUser упорно равен 0!

Последний раз редактировалось Ивано; 12.10.2012 в 14:02
  Ответить с цитированием
Старый 12.10.2012, 18:20   #2
Ивано
Guest
 
Сообщений: n/a
Arrow

Так понимаю что после сохранения сессии в БД выше приведенных кодом, необходимо проверять статус залогиннинности пользователя следующим кодом на каждой странице и там где требуется в контенте:

$user = tslib_eidtools::initFeUser();
$GLOBALS['TSFE']->loginUser = $user ? 1 : 0;
$GLOBALS['TSFE']->fe_user = $user;

  Ответить с цитированием
Старый 12.10.2012, 20:05   #3
dmartynenko
Senior Member
 
Аватар для dmartynenko
 
Регистрация: 20.07.2007
Адрес: Беларусь, Минск
Сообщений: 957
Отправить сообщение для dmartynenko с помощью ICQ
По умолчанию

Цитата:
Сообщение от Ивано Посмотреть сообщение
Так понимаю что после сохранения сессии в БД выше приведенных кодом, необходимо проверять статус залогиннинности пользователя следующим кодом на каждой странице и там где требуется в контенте
Нет, вызывать tslib_eidtools::initFeUser() не нужно.

Эта функция только для eID скриптов (там кстати нет $GLOBALS['TSFE'], поэтому присвоение чего-то $GLOBALS['TSFE']-> бессмысленно и приедет к warning).

В FE плагинах можно просто проверить $GLOBALS['TSFE']->loginUser, он будет уже инициализирован на момент вызова вашего плагина.
dmartynenko вне форума   Ответить с цитированием
Старый 12.10.2012, 20:08   #4
dmartynenko
Senior Member
 
Аватар для dmartynenko
 
Регистрация: 20.07.2007
Адрес: Беларусь, Минск
Сообщений: 957
Отправить сообщение для dmartynenko с помощью ICQ
По умолчанию

Что касается ручного логина в коде - а "обычный" у вас работает?
Если и он не работает, может быть проблема с сохранением кук в броузере, или с привязкой созданных кук к правильному домену.
dmartynenko вне форума   Ответить с цитированием
Старый 12.10.2012, 20:56   #5
Ивано
Guest
 
Сообщений: n/a
Red face Полный код

Обычный работает.
Данный код у меня успешно работает только в google chrome.
Opera и IE - не сохраняют как понимаю сессию.
Суть кода - выводится форма авторизации пользователя если не залогинен и наоборот - если залогинин выводится формы выхода.

PHP код:
<?php

require_once(PATH_tslib.'class.tslib_pibase.php');

class 
tx_gregre2_pi1 extends tslib_pibase {
    var 
$prefixId      'tx_gregre2_pi1';        // Same as class name
    
var $scriptRelPath 'pi1/class.tx_gregre2_pi1.php';    // Path to this script relative to the extension dir.
    
var $extKey        'gregre2';    // The extension key.
    
var $pi_checkCHash true;
    

    function 
main($content$conf) { global $_SERVER$_POST;
        
$this->conf $conf;
        
$this->pi_setPiVarDefaults();
        
$this->pi_loadLL();
    

    
//Если переданны POST_данные
        
if ($_POST['autoriz'] == true)
        {
                

$check FALSE;
$loginData = array(
'username' => $_POST['loging'],//"userz",
'uident_text' => $_POST['password'], //"pass",
'status' => 'login',
);
    
        
$GLOBALS['TSFE']->fe_user->checkPid FALSE//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(457)';
        
$user $GLOBALS['TSFE']->fe_user->fetchUserRecord($info['db_user'], $loginData['username']);
    
    
    
#$BE_USER->writelog(255,2,0,1,'User %s logged out from TYPO3 Backend',Array($BE_USER->user['username']));        // Logout written to log
    #$BE_USER->logoff();
    #header('Location: '.t3lib_div::locationHeaderUrl(t3lib_div::_GP('redirect')?t3lib_div::_GP('redirect'):'index.php'));

    
$login_success $GLOBALS['TSFE']->fe_user->compareUident($user,$loginData);
    if(
$login_success){

        
#$GLOBALS['TSFE']->fe_user->createUserSession($user);
        #$GLOBALS['TSFE']->fe_user->start();
        #$GLOBALS['TSFE']->loginUser = 1;     

          
$GLOBALS["TSFE"]->fe_user->createUserSession($user);
          
$GLOBALS["TSFE"]->fe_user->loginSessionStarted TRUE;
         
# $GLOBALS["TSFE"]->fe_user->user = $GLOBALS["TSFE"]->fe_user->fetchUserSession();
          
$GLOBALS ["TSFE"] ->fe_user->start();
          
#$GLOBALS ["TSFE"] ->loginUser = 1;
            
        #return 1;
        
        
        
$user tslib_eidtools::initFeUser(); 
        
$GLOBALS['TSFE']->loginUser $user 0;
        
$GLOBALS['TSFE']->fe_user $user;
        
        
}    
    
            
#print_r($_POST);
}
    
    
        
//Если переданны POST_данные - на выход и разрыв сессии
        
if ($_POST['logingout'] == true)
        
$GLOBALS['TSFE']->fe_user->logoff();
    
    
        if (  
$GLOBALS['TSFE']->loginUser == 1  )
        { 
            
$content "Вы авторизированны <form method='post'><input type='submit' name='logingout' value='Выйти из системы'></form>
            <h4>Информация о пользователе</h4><pre>"
;
        }
        else
        {
            
$content='Вы не авторизированны!<hr><form method="post">
            <input name="loging" type="text"><br />
            <input name="password" type="text"><br />
            <input type="submit" name="autoriz" value="Авторизироваться"></form>'
;
        }
        
        
    
        return 
$this->pi_wrapInBaseClass($content);
    }
}



if (
defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/gregre2/pi1/class.tx_gregre2_pi1.php'])    {
    include_once(
$TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/gregre2/pi1/class.tx_gregre2_pi1.php']);
}

?>
Во всех браузерах сессии создаются в таблице fe_sessions.
Так понимаю это проблема в cookie - как можно их подправить?

Последний раз редактировалось Ивано; 12.10.2012 в 21:24
  Ответить с цитированием
Старый 12.10.2012, 21:05   #6
Ивано
Guest
 
Сообщений: n/a
По умолчанию

Хотя нет - причина в том, что данные не пишутся в таблицу fe_session!
  Ответить с цитированием
Старый 12.10.2012, 21:12   #7
Ивано
Guest
 
Сообщений: n/a
По умолчанию

Поменял на вот этот код и все заработало - сессии создаются...

$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;

Единственное что осталось - это если закрыть браузер сессия разрывается.
Необходима кнопка запомнить.

Последний раз редактировалось Ивано; 12.10.2012 в 21:37
  Ответить с цитированием
Старый 12.10.2012, 22:00   #8
Ивано
Guest
 
Сообщений: n/a
Question

В стандартной форме почему-то не работает:
"Display Remember Login Option"
(Показать параметр о запоминании авторизации)
  Ответить с цитированием
Старый 15.10.2012, 16:16   #9
Dmitry Dulepov
Продвинутый
 
Аватар для Dmitry Dulepov
 
Регистрация: 28.04.2010
Сообщений: 73
По умолчанию

Скажите, что именно вы хотите сделать. Возможно, мы скажем вам – как
Dmitry Dulepov вне форума   Ответить с цитированием
Старый 17.10.2012, 22:33   #10
Ивано
Guest
 
Сообщений: n/a
Unhappy

В общем научился работать с сессиями для анонимных пользователей и авторизированных пользователей (прочитал здесь - http://www.koller-webprogramming.ch/...-mit-sessions/). С удивлением узнал, что если на любой странице передать через post user, pass и pid-хранилища записей пользователей - то произойдет аудентификация пользователя без всяких расширений и прочего.

С сессиями работаю так:

PHP код:
$typesess = ($GLOBALS['TSFE']->loginUser == 'user' 'ses');
$sessionData $GLOBALS['TSFE']->fe_user->getKey($typesess'tx_test_pi1');
                    
        
$sessionData['test'] = "Hellow Word";
                
//Перезаписваем сессию (обновляем "Данные в ДАТА")
$GLOBALS['TSFE']->fe_user->setKey($typesess'tx_test_pi1'$sessionData);
$GLOBALS['TSFE']->fe_user->sesData_change 1;
$GLOBALS['TSFE']->fe_user->storeSessionData(); 

Единственное что не могу понять, так как сделать так, что бы после входа в систему на основе кода который привожу в начале данной темы - запомнить этот вход на всегда... Т.е. что бы браузер закрыл и открыл и не приходилось входить по новой (аналог кнопки "Запомнить пароль").
  Ответить с цитированием
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB code is Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Какой механизм публикации картинок на сайте выбрать? Илья Общие вопросы 3 18.04.2007 17:46


Часовой пояс GMT +4, время: 15:28.


Работает на vBulletin® версия 3.8.1.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot

Хостинг и техническая поддержка: TYPO3 Лаборатория