[EAuth] Единая авторизация пользователей

Выкладываем свои наработки
Nodge
Сообщения: 26
Зарегистрирован: 2011.01.02, 23:17

Re: [EAuth] Единая авторизация пользователей

Сообщение Nodge »

BuCeFaL писал(а):Очень интересное расширение, добавил в избранное как только статья появилась но есть вопрос.
Вот к примеру я использую несколько сервисов для единой авторизации но в тоже время я 1 человек с несколькими сервисами, а не несколько человек с 1 сервисом. Отсюда вопрос, если ли возможность объединить учетные записи для разных сервисов. Подобное реализовано много где, например в disqus, teamlab.com и кучи (почти всех) других сервисов.

PS: Знакомое название статьи :)
Такая возможность, естественно, есть. Но это не является задачей данного расширения.
После авторизации у Вас есть идентификатор сервиса и идентификатор пользователя в этом сервисе. Соответственно, я в своих проектах завожу примерно такую таблицу: id - uid - service - identity, и в настройках пользователь может "прилинковать" сколько угодно аккаунтов.
Аватара пользователя
BuCeFaL
Сообщения: 447
Зарегистрирован: 2010.03.17, 21:22
Откуда: Kiev
Контактная информация:

Re: [EAuth] Единая авторизация пользователей

Сообщение BuCeFaL »

Nodge писал(а):
BuCeFaL писал(а):Очень интересное расширение, добавил в избранное как только статья появилась но есть вопрос.
Вот к примеру я использую несколько сервисов для единой авторизации но в тоже время я 1 человек с несколькими сервисами, а не несколько человек с 1 сервисом. Отсюда вопрос, если ли возможность объединить учетные записи для разных сервисов. Подобное реализовано много где, например в disqus, teamlab.com и кучи (почти всех) других сервисов.

PS: Знакомое название статьи :)
Такая возможность, естественно, есть. Но это не является задачей данного расширения.
После авторизации у Вас есть идентификатор сервиса и идентификатор пользователя в этом сервисе. Соответственно, я в своих проектах завожу примерно такую таблицу: id - uid - service - identity, и в настройках пользователь может "прилинковать" сколько угодно аккаунтов.
Я понял. Спасибо за действительно полезное расширение.
Аватара пользователя
porcelanosa
Сообщения: 570
Зарегистрирован: 2010.03.16, 04:31
Откуда: Москва

Re: [EAuth] Единая авторизация пользователей

Сообщение porcelanosa »

А можно целиком демо проект скачать где-нибудь.
С таблицей и так далее?

И есть ли расширение yii для loginza?
mcintosh-club.ru - первый мой сайт с использование Yii //
Акустика Sonus Faber Hi-End класса//
Необрезная доска и другие пиломатериалы
Nodge
Сообщения: 26
Зарегистрирован: 2011.01.02, 23:17

Re: [EAuth] Единая авторизация пользователей

Сообщение Nodge »

Демо проект предельно простой, в нем сделано только то, что указанно в readme. Так что какой-либо готовой сборки нет.

Про логинзу легко гуглится.
Аватара пользователя
porcelanosa
Сообщения: 570
Зарегистрирован: 2010.03.16, 04:31
Откуда: Москва

Re: [EAuth] Единая авторизация пользователей

Сообщение porcelanosa »

Nodge писал(а):Демо проект предельно простой, в нем сделано только то, что указанно в readme. Так что какой-либо готовой сборки нет.

Про логинзу легко гуглится.
про логинзу эту статья я читала - но она 2 года назад написана - и там не совсем расширение.
Спасибо за ответ - буду пробовать и Ваш вариант и вариат с логинзой
mcintosh-club.ru - первый мой сайт с использование Yii //
Акустика Sonus Faber Hi-End класса//
Необрезная доска и другие пиломатериалы
Аватара пользователя
futbolim
Сообщения: 2051
Зарегистрирован: 2012.07.08, 19:28

Re: [EAuth] Единая авторизация пользователей

Сообщение futbolim »

Для тех, кто вроде правильно всё сделал, но не проходит авторизация, попробуйте добавить в ServiceUserIdentity

Код: Выделить всё

public function getId() {
        return $this->service->getId();
    }
 
kovalenko
Сообщения: 11
Зарегистрирован: 2012.07.02, 10:22

Re: [EAuth] Единая авторизация пользователей

Сообщение kovalenko »

Nodge писал(а):Демо проект предельно простой, в нем сделано только то, что указанно в readme. Так что какой-либо готовой сборки нет.
В документации нет каким образом обращаться к параметрам которые возвращает Ваше прекрасное расширение
alekso
Сообщения: 190
Зарегистрирован: 2012.09.15, 23:49

Re: [EAuth] Единая авторизация пользователей

Сообщение alekso »

Спасибо за расширение, пытаюсь его использовать в своем проекте. Авторизируюсь вконтакте*(делал по руководству на гитхабе), получаю Yii::app()->user->id равный пользовательскому айди вроде юзер авторизируется и логин проходит успешно. Подключил класс CustomVkontakteService, инстанцирую его, пытаюсь получить параметры, говорит что Unable to complete the request because the user was not authenticated.

Код: Выделить всё

    
$vk = new CustomVKontakteService;
    // var_dump($vk);
  $vk = $vk->getAttributes();
Я что то недопонял или делаю неправильно? Автор подскажите пожалуйста 2 дня сижу над вашим кодом :). Цель собственно получить доступ к данным юзера из соцсети...
Буду ОЧень благодарен за разьяснение...
UPD:
получил данные при авторизации и логине

Код: Выделить всё

         $service = Yii::app()->request->getQuery('service');
    if (isset($service)) {
        $authIdentity = Yii::app()->eauth->getIdentity($service);

        $authIdentity->redirectUrl = Yii::app()->user->returnUrl;
        $authIdentity->cancelUrl = $this->createAbsoluteUrl('access/test');
        
        if ($authIdentity->authenticate()) {
           
            $identity = new ServiceUserIdentity($authIdentity);
// Запихиваем данные в сессионую переменную
            Yii::app()->session['test'] =  $authIdentity->getAttributes();
            // Успешный вход
            if ($identity->authenticate()) {

                Yii::app()->user->login($identity);
              
                // Специальный редирект с закрытием popup окна
                $authIdentity->redirect(array('access/test'));
            }
            else {
                // Закрываем popup окно и перенаправляем на cancelUrl
                $authIdentity->cancel();
            }
        }
        
        // Что-то пошло не так, перенаправляем на страницу входа
        $this->redirect(array('access/test'));
    } 
Собственно теперь другой вопрос нужно каждый раз запрос на авторизацию составлять что бы получить эти данные? Каким методом воспользоваться что бы получить их когда человек уже залогинился на мой сайт?
2 вопрос города страны возвращаются в кодах, где взять их имена или реф?
Nodge
Сообщения: 26
Зарегистрирован: 2011.01.02, 23:17

Re: [EAuth] Единая авторизация пользователей

Сообщение Nodge »

alekso писал(а):Собственно теперь другой вопрос нужно каждый раз запрос на авторизацию составлять что бы получить эти данные? Каким методом воспользоваться что бы получить их когда человек уже залогинился на мой сайт?
2 вопрос города страны возвращаются в кодах, где взять их имена или реф?
К сожалению, "из коробки" совершать запросы к API можно только сразу после авторизации. Но все поправимо =)
ВКонтакте использует авторизацию OAuth2. Изучите класс EOAuth2Service. Для выполнения запросов к API нужен access_token. Обратите внимание на метод restoreAccessToken(). Вы можете хранить данный токен в сессии/бд/кеше/etc и выполнять запросы когда вам нужно. =)

По поводу названий городов и стран - все зависит от конкретной соц. сети. В случае с ВКонтакте см. документацию.
YunX
Сообщения: 87
Зарегистрирован: 2011.07.06, 12:53

Re: [EAuth] Единая авторизация пользователей

Сообщение YunX »

Возникла проблема авторизации через ВК.ком. Все делал по мануалу. получил id и секретный ключ.
Пытаюсь войти, пересылает на "Получение доступа к ВКонтакте" нажимаю "Разрешить" и получаю следующее.

Код: Выделить всё

 Invalid response http code: 400.

/home/findfood/findfood.ru/docs/protected/extensions/eauth/EAuthServiceBase.php(279)

267 
268         if (curl_errno($ch) > 0)
269             throw new EAuthException(curl_error($ch), curl_errno($ch));
270         
271         if ($headers['http_code'] != 200) {
272             Yii::log(
273                 'Invalid response http code: '.$headers['http_code'].'.'.PHP_EOL.
274                 'URL: '.$url.PHP_EOL.
275                 'Options: '.var_export($options, true).PHP_EOL.
276                 'Result: '.$result,
277                 CLogger::LEVEL_ERROR, 'application.extensions.eauth'
278             );
279             throw new EAuthException(Yii::t('eauth', 'Invalid response http code: {code}.', array('{code}' => $headers['http_code'])), $headers['http_code']);
280         }
281         
282         curl_close($ch);
283                 
284         if ($parseJson)
285             $result = $this->parseJson($result);
286         
287         return $result;
288     }
289     
290     /**
291      * Initializes a new session and return a cURL handle.

не получаю 200 статус страницы.
yandex, google работают из той же сборки eauth 1.8.
Другие пока не пробовал.
Nodge
Сообщения: 26
Зарегистрирован: 2011.01.02, 23:17

Re: [EAuth] Единая авторизация пользователей

Сообщение Nodge »

YunX писал(а):Возникла проблема авторизации через ВК.ком. Все делал по мануалу. получил id и секретный ключ.
Пытаюсь войти, пересылает на "Получение доступа к ВКонтакте" нажимаю "Разрешить" и получаю следующее.
не получаю 200 статус страницы.
yandex, google работают из той же сборки eauth 1.8.
Другие пока не пробовал.
Скачайте последнюю версию из master на гитхабе. У ВК менялось API, в master этот баг уже исправлен.
nikitakls
Сообщения: 47
Зарегистрирован: 2011.01.25, 08:18

Re: [EAuth] Единая авторизация пользователей

Сообщение nikitakls »

Добрый день!
Пытаюсь поставить интегрировать ваше расширение в свое приложение.

Похоже нашел багу.
В FF не работает popup окно
Версия FF 17
Вместо того, чтобы открыть popup открывается новая вкладка.
Приложение логинится, но для того чтобы пользователь увидель что он залогинился нужно вручную перезагрузить страницу.

Проверял на Chrome все работает.
Версия последняя с github
Завел на это тикет в github https://github.com/Nodge/yii-eauth/issues/49
andry
Сообщения: 224
Зарегистрирован: 2009.11.08, 16:52

Re: [EAuth] Единая авторизация пользователей

Сообщение andry »

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

не получив емайл адрес, связать аккаунты уже не получиться, и другого способа я не представляю.
Nodge
Сообщения: 26
Зарегистрирован: 2011.01.02, 23:17

Re: [EAuth] Единая авторизация пользователей

Сообщение Nodge »

andry писал(а):спасибо автору за расширение, авторизация работает. Но тут возник вопрос, как связать все аккаунты автоматически, с написанием кода я уже сам справлюсь, вопрос как получить емайл адрес, или это не возможно? Все ли провайдеры предоставляют емайл или частично?
не получив емайл адрес, связать аккаунты уже не получиться, и другого способа я не представляю.
Забудьте про email адрес. Мало того, что не все провайдеры могут предоставить email адрес, дак они еще и не могут гарантировать, что он верный и принадлежит тому, кто авторизовывается(!). Т.е., я могу на стороннем сайте указать чужой email адрес и заполучить доступ к чужому аккаунту на вашем сайте.

В общем, связать аккаунты автоматически невозможно, только вручную, например, в настройках аккаунта просить авторизоваться.
yngwie
Сообщения: 7
Зарегистрирован: 2011.10.23, 14:48

Re: [EAuth] Единая авторизация пользователей

Сообщение yngwie »

Ребят напишите пожалуйста небольшой пример, как сохранить авторизованного пользователя в базу (например MySQL) и при последующей авторизации использовать его данные.
Tpona
Сообщения: 222
Зарегистрирован: 2011.06.05, 19:00

Re: [EAuth] Единая авторизация пользователей

Сообщение Tpona »

+1 Поддерживаю предыдущего постера
madmis
Сообщения: 17
Зарегистрирован: 2012.02.23, 15:29

Re: [EAuth] Единая авторизация пользователей

Сообщение madmis »

Код: Выделить всё

    public function authenticate() {
        // если пользователь авторизован через сервис
        // выполняем дальнейшие действия
        if ($this->service->isAuthenticated) {
            $userServiceModel = UserService::model()->getUserByService($this->service);

            $this->errorCode = self::ERROR_NONE;
            // если пользователь есть, просто авторизуем его
            if ($userServiceModel != null) {
                $userServiceModel->user->lastvisit = Yii::app()->format->formatDbDate('now');
                $userServiceModel->user->save();
            } else {
                // если пользователя нет, добавляем его
                $userModel = new User();
                if ($userModel->add($this->service->getAttribute('name')) && $userModel->id != null) {
                    // Добавляем запись в user_service
                    $userServiceModel = new UserService();
                    $userServiceModel->user_id = $userModel->id;
                    $userServiceModel->service = $this->service->serviceName;
                    $userServiceModel->identity = $this->service->id;
                    if (!$userServiceModel->save()) {
                        $this->errorCode = self::ERROR_INSERT_USER_SERVICE;
                    } 
                } else {
                    $this->errorCode = self::ERROR_INSERT_USER;
                }
            }

            if (!$this->errorCode) {
                $this->id = $userServiceModel->user_id;
                $this->name = $userServiceModel->user->username;
                $this->setState('id', $this->id);
                $this->setState('name', $this->name);
                $this->setState('serviceId', $this->service->id);
                $this->setState('service', $this->service->serviceName);
            }
        } else {
            $this->errorCode = self::ERROR_NOT_AUTHENTICATED;
        }
        return !$this->errorCode;
    }
alekso
Сообщения: 190
Зарегистрирован: 2012.09.15, 23:49

Re: [EAuth] Единая авторизация пользователей

Сообщение alekso »

Спасибо автору за экстеншен, использовал его немного модифицировав под свои нужды, хочу похвалить автора, экстеншен сделан добротно, позволяет легко настроить под свои нужды.
Единственное что пока не решил - то что обсуждалось в статье на хабре, проблема использования множественных сервисов, сделал привязку но она не спасает от того если пользователь зашел через один сервис, не привязал другой и зашел через этот другой - создается новая учетка, но как я понял решения этой проблемы не существует т.к. несчем сравнивать. У западных пользователей довольно просто все, в основном пользуются фейсбуком, или твитером, у нас сложней, приходиться ставить кучу сервисов а как их синхронизировать на одну учетку не понятно.
Аватара пользователя
vitovt
Сообщения: 210
Зарегистрирован: 2012.03.21, 10:37
Контактная информация:

Re: [EAuth] Единая авторизация пользователей

Сообщение vitovt »

У меня стоит последняя версия библиотеки, на бета-сервере все работает, на реал выкатываю 400 ошибка. Притом что новый домен в приложениях в FB и ВК прописываю.

Скачивал последнюю версию, загружал - результат один.

Invalid response http code: 400. {"error":{"message":"Error validating verification code. Please make sure your redirect_uri is identical to the one you used in the OAuth dialog request","type":"OAuthException","code":100}}


притом, что когда распечатываю лог то URL такого вида

graph.facebook.com/oauth/access_token?client_id=462860363746261&client_secret=c460511f3a2b07126594909c081780e3&code=AQCmcjrEXE1UuWJ_bH-fkMMJFXunVWKJPsdFSPFkOK7S3Twp6ytpTjnP-VP63XBnkwf1ypYDVGCLBKzWZ3xyo7Ox0kO4Hh7wBPx41YwpC5xDbBSqSKyXFhST_mnoBL-Znw6rzFW7Vsrdfy1Ow33Top_Nkrr6Nihspmk62C0IcEQpTZqd4cSW-BAVuDJu1JUvnG7t_6QtpHvs8laJzzqOv0YzoJebq_9yBrYs_CfDeUdqFz3aPZ-QCoMTkUvG4yO3bhDV1ZjnaVYS1jG&redirect_uri=&redirect_uri=
Ответить