ФорумПрограммированиеPHP для идиотов → Помогите с аутентификацией

Помогите с аутентификацией

  • Абырвалг

    Сообщения: 6477 Репутация: N Группа: Джедаи

    Spritz 10 марта 2011 г. 15:34

    Хочу сделать по-максимуму гибко. Выделил 4 интерфейса. Вот что получилось - https://gist.github.com/778803cec98a82cde77b . Смотреть сначала интерфейсы а потом примеры классов.

    1) Чую, что где-то проебал. Что бы вы делали иначе?
    2) Над этим всем нужно сделать фасад. Вообще застрял.

    Мне кажется, что в репозиторий (EntityProviderInterface) можно лезть только используя CredentialsStorageInterface::getCredentials(). Что думаете по этому поводу? Или может быть этот момент должен Фасад разруливать?


    Особенно интересно мнение товарищей Kostyl, Krasun, NRG. Хыхы, забавно, все они - украинцы.
  • md5

    Сообщения: 11951 Репутация: N Группа: в ухо

    Spritz 10 марта 2011 г. 16:04, спустя 30 минут 23 секунды

    аутентификация по-украински блеать!
    все умрут, а я изумруд
  • kostyl

    Сообщения: 5201 Репутация: N Группа: Джедаи

    Spritz 10 марта 2011 г. 16:15, спустя 10 минут 49 секунд

    Какой например фасад должен по твоему разруливать?
    И мне кажется надо чёто упросить… хотя бы на одну сущьность меньше…
  • Абырвалг

    Сообщения: 6477 Репутация: N Группа: Джедаи

    Spritz 10 марта 2011 г. 16:34, спустя 19 минут 33 секунды

    фигассе, вот это я навертел, если даже ты говоришь, что интерфейсов больше чем нужно :D.

    Я не знаю, что упростить. 4 сущности, если провести параллель с реальным миром, то:
    1) человек
    2) картотека, где записаны люди
    3) сторож, который грубо говоря проверяет сетчатку глаза и выдает временный пропуск, что б каждый раз не проверять сетчатка
    4) пропуск/сетчатка глаза, который человек предъявляет сторожу


    А фасад нужен что б упростить взаимодействие с этими 4 сущностями. Наверняка нужно будет еще какой-нить чайнинг еще впихнуть (вход через контакт, который является оберткой над стандартным входом и тд).
  • krasun

    Сообщения: ? Репутация: N Группа: Джедаи

    Spritz 10 марта 2011 г. 17:15, спустя 40 минут 20 секунд

    Очень сильно, хочу спать, бегло просмотрел…

    Не понял, зачем тебе CredentialsStorageInterface. Тем более у тебя в примере, вообще прикол:

    class CredentialsStorage_Form_Example implements CredentialsStorageInterface
    {
    public function getCredentials()
    {
    return array('login' => $_POST['login'], 'pass' => $_POST['pass']);
    }

    public function ereaseCredentials(AccountInterface $entity)
    {
    }

    public function updateCredentials(AccountInterface $entity, array $credentials)
    {
    }
    }


    Вот здесь:

    // … code …
    public function checkIdentify(AccountInterface $entity, CredentialsStorageInterface $credentialsStorage)
    {
    $identify = $entity->getIdentify();
    $credentials = $credentialsStorage->getCredentials();

    return $credentials['pass'] == $identify['pass'];
    }
    // … code …


    Я бы добавил какие-то параметры, что-то типа:

    // … code …
    public function checkIdentify(AccountInterface $entity, CredentialsStorageInterface $credentialsStorage, array $params)
    {
    $identify = $entity->getIdentify();
    $credentials = $credentialsStorage->getCredentials();

    return $credentials[$params['credentialKey']] == $identify[$params['credentialKey']];
    }
    // … code …


    И я так и не понял, откуда появиться $credentialsStorage, где ты его создашь и каким образом.

    Так и не понял:

    interface AuditorInterface
    {
    function checkIdentify(AccountInterface $entity, CredentialsStorageInterface $credentialsStorage);
    function identify(AccountInterface $entity, CredentialsStorageInterface $credentialsStorage);
    function updateIdentify(AccountInterface $entity, CredentialsStorageInterface $credentialsStorage);
    function removeIdentify(AccountInterface $entity, CredentialsStorageInterface $credentialsStorage);
    }

    Зачем тебе здесь checkIdentify и identify одновременно? Мне кажется, что можно обойтись без одного из них, вообще два этим метода меня сразу путают.
    Я бы зделал в identify просто, что типа $entity->isAuthentificated(), вместо checkIdentify().


  • phpdude

    Сообщения: 26617 Репутация: N Группа: в ухо

    Spritz 10 марта 2011 г. 18:04, спустя 48 минут 58 секунд

    реальни по украински xDD
    Сапожник без сапог
  • LIFF

    Сообщения: 188 Репутация: N Группа: Адекваты

    Spritz 10 марта 2011 г. 18:12, спустя 8 минут 30 секунд

    Абырвалг, если Украинец, то это не значит, что можно писать имена функций по англицки как слЫшЫтся)) (erase), подумай о будующих прогах)))))
  • Абырвалг

    Сообщения: 6477 Репутация: N Группа: Джедаи

    Spritz 10 марта 2011 г. 18:43, спустя 31 минуту 2 секунды

    чорд, та вроде ж все проверял
  • Абырвалг

    Сообщения: 6477 Репутация: N Группа: Джедаи

    Spritz 12 марта 2011 г. 16:05, спустя 1 день 21 час 21 минуту

    Я бы добавил какие-то параметры, что-то типа:

    такие параметры будут задаваться, да, но через отдельные сеттеры {+++36+++} +это упрощенный вариант, для простоты понимания. {+++121+++}
    Не понял, зачем тебе CredentialsStorageInterface. Тем более у тебя в примере, вообще прикол:

    какой прикол? CredentialsStorageInterface - сторейдж. Хранилище данных, по которым можно опознать пользователя, сравнить то, что в картотеке с тем, что у пользователя на руках. Это кошелек, в котором лежит пропуск.
  • Абырвалг

    Сообщения: 6477 Репутация: N Группа: Джедаи

    Spritz 12 марта 2011 г. 16:10, спустя 5 минут 26 секунд

    Зачем тебе здесь checkIdentify и identify одновременно?

    согласен, удалил
  • Frozzeg

    Сообщения: 5642 Репутация: N Группа: Джедаи

    Spritz 12 марта 2011 г. 16:11, спустя 59 секунд

    суббота вечер..
    программисты..
    You can be anything you want to be. Just turn yourself into anything you think that you could ever be.
  • Абырвалг

    Сообщения: 6477 Репутация: N Группа: Джедаи

    Spritz 12 марта 2011 г. 16:22, спустя 10 минут 56 секунд

    я только час назад за комп сел
  • krasun

    Сообщения: ? Репутация: N Группа: Джедаи

    Spritz 12 марта 2011 г. 16:33, спустя 10 минут 13 секунд

    какой прикол?

    там два метода не реализованные
  • Абырвалг

    Сообщения: 6477 Репутация: N Группа: Джедаи

    Spritz 12 марта 2011 г. 16:39, спустя 6 минут 46 секунд

    аа! Так они там собственно говоря не очень-то и нужны. Это ж форма входа. Там нет никаких отпавок кук и тд. Можно так сделать

    	public function updateIdentify(AccountInterface $account, CredentialsStorageInterface $credentialsStorage)
    {
    if (!$this->checkIdentify($account, $credentialsStorage)) {
    throw new Exception('Not valid user');
    }

    $credentialsStorage->updateCredentials($account, array());
    }

    public function removeIdentify(AccountInterface $account, CredentialsStorageInterface $credentialsStorage)
    {
    $account->setAuthenticated(false);
    $credentialsStorage->eraseCredentials($account);
    }
    {+++27+++} ну или $_POST['login'] = $_POST['pass'] = null; {+++30+++} в общем спорный момент, это не главная проблема там
  • phpdude

    Сообщения: 26617 Репутация: N Группа: в ухо

    Spritz 12 марта 2011 г. 17:19, спустя 40 минут

    во расписали хуйни то :D::D

    вместо обычного

    $us = db->find("users", array("name" => $_POST['user'], "pass" => md5($_POST['pass'])));
    if(!$us) throw new ..

    :D:D
    Сапожник без сапог

Пожалуйста, авторизуйтесь, чтобы написать комментарий!