Модераторы: Aliance, skyboy, MoLeX, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Zend_Auth, Zend Framework 1.11.2 
:(
    Опции темы
fearuth
Дата 11.1.2011, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 9.9.2008

Репутация: нет
Всего: 1



Привет всем! Столкнулся с задачей в которой необходим условием является использование Zend Framework. Погуглил, поковырял данный MVC. Сейчас появлися вопрос, на который не могу найти чёткого ответа.

Нужно создать механизм авторизации. В большинстве сайтов встречается один и тот же пример с использованием Zend_Auth, но описание не ахти какое. Знающие люди поделитесь опытом =) Очень инетересно =)
PM MAIL   Вверх
CruorVult
Дата 11.1.2011, 13:36 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 868
Регистрация: 24.9.2008
Где: г.Киев, Украина

Репутация: нет
Всего: 28



PM MAIL Skype   Вверх
fearuth
Дата 12.1.2011, 07:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 9.9.2008

Репутация: нет
Всего: 1



Я вроде как писал, что читал документацию =)

Ладно, поставим вопрос по другому. =)

Задача у меня следующая. Есть БД, в ней таблица users, в таблице ключевые поля nick, pass (пароль), lock (показывает заблокирован доступ пользователю к приложению или нет).

Если я правильно понял сам алгоритм аутентификации будет примерно следующим:

Код

public function authAction...
...
$adapter = Zend_Auth_Adapter_DbTable
(
    $db,
    'users',
    'nick',
    'pass',
    'lock=false'
);

$adapter->setIdentity('username')->setCredential('password');

$result=$adapter->authenticate();

if($result->isValid())
{
     // Авторизовались
}


А как проверять авторизован пользователь в других Action или нет?

Это сообщение отредактировал(а) fearuth - 12.1.2011, 07:30
PM MAIL   Вверх
CruorVult
Дата 12.1.2011, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 868
Регистрация: 24.9.2008
Где: г.Киев, Украина

Репутация: нет
Всего: 28



не путайте аутентификацию и авторизацию!
Если пользователь прошел аутентификацию то выполняем авторизацию с помощью сессий.
Код

if($result->isValid())
{
     // тут выполняется авторизация
}


Это сообщение отредактировал(а) CruorVult - 12.1.2011, 11:37
PM MAIL Skype   Вверх
fearuth
Дата 12.1.2011, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 9.9.2008

Репутация: нет
Всего: 1



Тогда получается, что

Код

$result=$adapter->authenticate();


выполняет поиск по БД в соответствующих полях по условию AND, а в

Код

if($result->isValid())
{
     // тут выполняется авторизация
}


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

ЗЫ. Я просто хочу разобраться основательно, а не писать костыли и велосипеды =(
PM MAIL   Вверх
CruorVult
Дата 12.1.2011, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 868
Регистрация: 24.9.2008
Где: г.Киев, Украина

Репутация: нет
Всего: 28



Цитата(fearuth @  12.1.2011,  12:24 Найти цитируемый пост)
Тогда как потом проверять в последующих Action других контроллеров, что авторизация прошла?


вы механизм работы сессий знаете?
PM MAIL Skype   Вверх
fearuth
Дата 12.1.2011, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 9.9.2008

Репутация: нет
Всего: 1



Знаю. =) Но в Zend есть Zend_Session, а он в свою очередь как то тесно связан с Zend_Auth...

Если не тяжело можно разъяснить?
PM MAIL   Вверх
CruorVult
Дата 12.1.2011, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 868
Регистрация: 24.9.2008
Где: г.Киев, Украина

Репутация: нет
Всего: 28



Цитата(fearuth @  12.1.2011,  12:52 Найти цитируемый пост)
Zend_Session, а он в свою очередь как то тесно связан с Zend_Auth


нет не связан, в Zend_Auth только проверяется можно ли определенному пользователю зайти в систему, если можно - то нужно использовать уже другие средства. Если будет разработываться гибкая система с правами достума то я бы рекомендовал попробовать Zend_Acl, если нет - то просто сессии: либо обертку Zend_Session, либо напрямую.


PM MAIL Skype   Вверх
fearuth
Дата 12.1.2011, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 9.9.2008

Репутация: нет
Всего: 1



Вот как раз с разграничением прав пользователей будет разрабатываться. Я уже почитал про Zend_Acl. Очень удобно.

Я пока сделал вот такой вариант проверки то, что пользователь прошел авторизацию:

Код

...SomeController....

    public function checkAuth()
    {
        $auth = Zend_Auth::getInstance();
        if($auth->hasIdentity())
        {
            return true;
        }
        return false;
    }

   public function someAction()
   {
       if($this->checkAuth())
       {
            $this->view->res="Авторизован";
       }
       else
      {
            return $this->_forward('index');
      }
   }
...


Это нормально?
PM MAIL   Вверх
CruorVult
Дата 12.1.2011, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 868
Регистрация: 24.9.2008
Где: г.Киев, Украина

Репутация: нет
Всего: 28



это только аутентификация, авторизации у вас нет.

+ авторизация должна проходить в одном месте а не вовсех контроллерах, в остальных проверяется только сессия

Это сообщение отредактировал(а) CruorVult - 12.1.2011, 13:37
PM MAIL Skype   Вверх
fearuth
Дата 12.1.2011, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 9.9.2008

Репутация: нет
Всего: 1



Тогда как мне быть? Прошу хоть мало-мальский пример... Ну хоть, что-то от чего можно оттолкнуться.
PM MAIL   Вверх
CruorVult
Дата 12.1.2011, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 868
Регистрация: 24.9.2008
Где: г.Киев, Украина

Репутация: нет
Всего: 28



Код

if($this->checkAuth())
       {
            $this->view->res="Авторизован";
            $_SESSION['ses_name']['username'] = $username;//вот самый простой способ
       }


после этого будет авторизирован пользоватьель и в любом месте вы можете пустить его дальше или нет

Это сообщение отредактировал(а) CruorVult - 12.1.2011, 13:49
PM MAIL Skype   Вверх
fearuth
Дата 13.1.2011, 09:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 9.9.2008

Репутация: нет
Всего: 1



Цитата(CruorVult @  12.1.2011,  13:48 Найти цитируемый пост)
после этого будет авторизирован пользоватьель и в любом месте вы можете пустить его дальше или нет


Долго и упорно вчитывался в документацию и наткнулся на несколько фактов:
    1. При работе с ZF лучше всего использовать Zend_Session вместо стандартного механизма $_SESSION;
    2. По умолчанию, Zend_Auth обеспечивает постоянное хранение идентификатора полученного в результате успешной попытки аутентификации в PHP сессии. При успешной попытке, Zend_Auth::authenticate() сохраняет идентификатор в постоянном хранилище ... которое в свою очередь использует Zend_Session!
Получается, что ваш вариант с:

Код

$_SESSION['ses_name']['username'] = $username;//вот самый простой способ


является велосипедом, так как это значение уже есть в хранилище/Zend_Session. Получить его можно при помощи Zend_Auth::getIdentity().

В моём же случае, мне нужно только проверять в каждом Action существует ли результат моей аутентификации в сессии или нет. Для этого, как раз и существует метод Zend_Auth::hasIdentity(), который проверяет наличие сессии и результата аутентификации =)

Исходя из этого, метод контроллера:

Код

public function checkAuth()
{
        $auth = Zend_Auth::getInstance();
        if($auth->hasIdentity())
        {
            return true;
        }
        return false;
}


используемый в каждом Action перед выполнением энных действий и является АВТОРИЗАЦИЕЙ (авторизация — предоставление этому лицу возможностей в соответствие с положенными ему правами или проверка наличия прав при попытке выполнить какое-либо действие (с) википедия).

Это сообщение отредактировал(а) fearuth - 13.1.2011, 09:06
PM MAIL   Вверх
CruorVult
Дата 13.1.2011, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 868
Регистрация: 24.9.2008
Где: г.Киев, Украина

Репутация: нет
Всего: 28



Цитата(fearuth @  13.1.2011,  09:02 Найти цитируемый пост)
1. При работе с ZF лучше всего использовать Zend_Session вместо стандартного механизма $_SESSION;



Вы наверное не поняли смысла:
Код

 $_SESSION['ses_name']['username'] = $username;//вот самый простой способ


это пример как можно авторизовать пользователя посредством сессий, а каким образом вы будете это делать - по вашому желанию
Цитата(CruorVult @  12.1.2011,  13:08 Найти цитируемый пост)
то просто сессии: либо обертку Zend_Session, либо напрямую.




Цитата(fearuth @  13.1.2011,  09:02 Найти цитируемый пост)
2. По умолчанию, Zend_Auth обеспечивает постоянное хранение идентификатора полученного в результате успешной попытки аутентификации в PHP сессии. При успешной попытке, Zend_Auth::authenticate() сохраняет идентификатор в постоянном хранилище ... которое в свою очередь использует Zend_Session!


Цитата(fearuth @  12.1.2011,  13:18 Найти цитируемый пост)
Вот как раз с разграничением прав пользователей будет разрабатываться. 


интересно каким образом, если вы собираетесь использовать только идентификатор успешной авторизации?

Это сообщение отредактировал(а) CruorVult - 13.1.2011, 12:07
PM MAIL Skype   Вверх
fearuth
Дата 13.1.2011, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 9.9.2008

Репутация: нет
Всего: 1



Цитата(CruorVult @  13.1.2011,  12:06 Найти цитируемый пост)
интересно каким образом, если вы собираетесь использовать только идентификатор успешной авторизации?


Москва не сразу строилась =) Пока прошел трудный и тернистый путь аутентификации и авторизации. Сейчас буду прикручивать Zend_Acl =)

А в хранилище Zend_Auth можно дописать дополнительную информацию =) А потом из него извлекать =)
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Libraries | Следующая тема »


 




[ Время генерации скрипта: 0.1030 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.