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

Выкладываем свои наработки
Аватара пользователя
vitovt
Сообщения: 210
Зарегистрирован: 2012.03.21, 10:37
Контактная информация:

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

Сообщение vitovt »

Вопрос снимается, проблема была в том, что в сессию не ложилось значение return_uri
nemolinks
Сообщения: 1
Зарегистрирован: 2013.07.22, 16:11

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

Сообщение nemolinks »

Добрый день всем
Новичок в Yii. Использую данное расширение в своём приложении.
Спасибо за него огромное автору.
Но сейчас обнаружил проблему - с которой никак не могу справиться.
Пользуюсь авторизацией VK и FB
Суть проблемы:

В некоторых браузерах (например Chrom) при авторизации черех FB возникает циклическая ошибка переадресаций:

"Загрузка веб-страницы по адресу https://www.facebook.com/dialog/oauth?client_id=.... вызвала слишком много переадресаций. Попробуйте очистить для этого сервера файлы cookie или разрешить их прием от независимых сайтов. Если это не поможет, возможно, проблема связана не с вашим компьютером, а с конфигурацией сервера."

Код ошибки: ERR_TOO_MANY_REDIRECTS

не могу понятьчто происходит. Кто то сталкивался с данной проблемой?

--------------
Вопрос решён, всем спасибо
Последний раз редактировалось nemolinks 2013.08.28, 18:14, всего редактировалось 1 раз.
Аватара пользователя
osys
Сообщения: 1
Зарегистрирован: 2013.08.28, 03:06
Откуда: Saint Pete, Russia
Контактная информация:

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

Сообщение osys »

Всем доброго дня!
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;
    }
Оценил, но возникло несколько вопросов. Сразу хотел бы оговориться это мой 2ой день с Yii.
Не могу понять, почему не сохраняется запись в бд. В данном примере создается новый экземпляр класса UserService(). Это стандартный класс yii или требуется доп. модуль? Если да - то почему yii не ругается на то что не может создать т.к. дополнительных модулей я не устанавливал.
Сразу оговорюсь что включил debug режим и поставил yii-debug.
Спасибо.
rwivan
Сообщения: 10
Зарегистрирован: 2013.05.31, 05:00

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

Сообщение rwivan »

Здравствуйте!

Что-то никак не могу подключить mail.ru
Сейчас при регистрации приложения они выдаю два ключа "Приватный ключ" и "Секретный ключ", куда их вставить - не пойму.

Устанавливаю в настройках хоть первый хоть второй - результат один - не пускает.

что я делаю не так ?
Joseph Jevelin
Сообщения: 339
Зарегистрирован: 2012.01.06, 22:07

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

Сообщение Joseph Jevelin »

Nodge, в первую очередь, благодарю за замечательное расширение)

Возник вопрос, возможно ли отследить в контроллере валидацию OpenID? Следующий код не даёт нужных результатов:

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

$auth = Yii::app()->loid->load();

if(!empty($_REQUEST['openid_mode']) && $auth->validate())
    // code...      
Необходимость в проверке возникла из-за соединения главной пользовательской модели и данного расширения. Перед авторизацией я проверяю статус пользователя, если он забанен, то выводится соответствующее сообщение. Всё хорошо, но, в адресной строке остаются GET-параметры. И если заново перейти по тому же адресу, выводится эксепшен. Обойти данную проблему можно с помощью флеш-сообщения вместо ошибки валидации, но хотелось бы более красивое решение, например, переход на другую страницу.
Аватара пользователя
Barssoft
Сообщения: 726
Зарегистрирован: 2013.01.21, 16:03

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

Сообщение Barssoft »

Тут может кто нибудь рассказать как при использовании данного расширения делать запросы по апи к вк.

мне нужно получать данные о пользователе, о его стене, альбомах, пабликах.
Мне нужно производить запись на его стену, альбомы и тд
Мне нужно чтоб пользователь вступал в группы и паблики

Очень хотелось бы чтоб работало все по такой схеме

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

Переменая = new Класс на сайте;
Необходимые данные = Переменная.Метод класса("Метод в контакте",array("Параметры метода в контакте"));
 
Токен и прочая лабуда подставляются автоматом к запрос на сервер вк, а так же распарсеваеся json а я получаю в переменную "Необходимые данные" массив.

Не прошу написать код, прошу помочь разобраться как это сделать, не могу разобраться как работают с крипты у автора, много наследований, интерфейсы... Очень сложно.....
Joseph Jevelin
Сообщения: 339
Зарегистрирован: 2012.01.06, 22:07

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

Сообщение Joseph Jevelin »

Barssoft, я предполагаю, что необходимо создать наследника, вызывая необходимые тебе методы.

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

class MyVKontakteOAuthService extends VKontakteOAuthService
{
    protected $scope = '';

    /**
     * http://vk.com/dev/fields
     *
     * @see VKontakteOAuthService::fetchAttributes()
     */
    protected function fetchAttributes()
    {
        $info = (array) $this->makeSignedRequest('https://api.vk.com/method/users.get.json', array(
            'query' => array(
                'uids' => $this->uid,  // uid, first_name and last_name is always available
                'fields' => 'sex, bdate, photo_200, screen_name, city, country, timezone',
            ),
        ));

        // code
    }
}
Аватара пользователя
Barssoft
Сообщения: 726
Зарегистрирован: 2013.01.21, 16:03

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

Сообщение Barssoft »

Joseph Jevelin писал(а):Barssoft, я предполагаю, что необходимо создать наследника, вызывая необходимые тебе методы.

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

class MyVKontakteOAuthService extends VKontakteOAuthService
{
    protected $scope = '';

    /**
     * http://vk.com/dev/fields
     *
     * @see VKontakteOAuthService::fetchAttributes()
     */
    protected function fetchAttributes()
    {
        $info = (array) $this->makeSignedRequest('https://api.vk.com/method/users.get.json', array(
            'query' => array(
                'uids' => $this->uid,  // uid, first_name and last_name is always available
                'fields' => 'sex, bdate, photo_200, screen_name, city, country, timezone',
            ),
        ));

        // code
    }
} 
Про наследника я понял, но не могу понять как работает данный код

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

protected function fetchAttributes()
    {
        $info = (array) $this->makeSignedRequest('https://api.vk.com/method/users.get.json', array(
            'query' => array(
                'uids' => $this->uid,  // uid, first_name and last_name is always available
                'fields' => 'sex, bdate, photo_200, screen_name, city, country, timezone',
            ),
        ));

        // code
    } 
Как мне написать функцию которая будет работать с классами автора, но так как мне надо, я не могу отследить цепочки изменения до моментка когда будет сформирован урл,
что будет в инфо тут в результате?
Аватара пользователя
Barssoft
Сообщения: 726
Зарегистрирован: 2013.01.21, 16:03

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

Сообщение Barssoft »

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

   
 $vk = new CustomVKontakteService();
    $vk->authenticate();
    $vk->fetchAttributes();
 
Выполнил код получил массив данных о пользователе, подскажите "$vk->authenticate();" всегда нужно выполнять, если вдруг у меня получиться каким то образом сделать функцию и получать необходимые данные после выполнения $vk->authenticate(), в случаи с записью я смогу ее совершить?

Если не сложно может кто делал пример расширенного класса для получения записи данных, выложите код.. В данной теме написано что можно без авторизации постоянной работать, как то там токен в сессию сохранять используя класс EOAuth2Service, я проследил и класс CustomVKontakteService является наследником от класса EOAuth2Service, как то значить можно по человечески сделать, но я не знаю как ((((
Joseph Jevelin
Сообщения: 339
Зарегистрирован: 2012.01.06, 22:07

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

Сообщение Joseph Jevelin »

По первому вопросу. Сам я не пробовал реализовать подобное, но по логике, ты должен забирать данные, подключаясь к нужным методам (http://vk.com/dev/methods).

Пример со стеной:

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

$wall = (array) $this->makeSignedRequest('https://api.vk.com/method/wall.get.json', array(
    'query' => array(
        'owner_id' => $this->uid,
        'offset' => 0,
        'count' => 1,
        'filter' => 'owner',
    ),

    $wall = $wall['response'][0];

    $text = $wall->text;
));
Не факт, что сработает, но суть должен уловить.
Аватара пользователя
Barssoft
Сообщения: 726
Зарегистрирован: 2013.01.21, 16:03

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

Сообщение Barssoft »

Joseph Jevelin писал(а):По первому вопросу. Сам я не пробовал реализовать подобное, но по логике, ты должен забирать данные, подключаясь к нужным методам (http://vk.com/dev/methods).

Пример со стеной:

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

$wall = (array) $this->makeSignedRequest('https://api.vk.com/method/wall.get.json', array(
    'query' => array(
        'owner_id' => $this->uid,
        'offset' => 0,
        'count' => 1,
        'filter' => 'owner',
    ),

    $wall = $wall['response'][0];

    $text = $wall->text;
));
Не факт, что сработает, но суть должен уловить.
А как тогда запись делать? почему функцию авторизации нужно запрашивать перед тем как данные получить... В апи написано что токен можно использовать, который действителен 1 час.

Я просто понять хочу могу ли я использовать данное расширение для целей которые мне нужны, или оставить только авторизации, написать класс в котором будут методы формирования урла, запроса по curl по этому урлу, и расспарсивание данных которые отдал сервер вк... Так как скажем разместить новость с картинкой, нужно будет загрузить картинку по апи, получить ее ссылку, подключить ее к новости с текстом, и опубликовать
geniy
Сообщения: 62
Зарегистрирован: 2014.03.17, 17:02
Контактная информация:

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

Сообщение geniy »

Ребята, подскажите пожалуйста после этого окна Изображение
выходит ошибка EAuthException SSL certificate problem: self signed certificate in certificate chain

Изображение

что мне делать?

Использую wamp сервер, extension=php_curl.dll включен, версия из master ...
Последний раз редактировалось geniy 2014.03.21, 19:09, всего редактировалось 2 раза.
geniy
Сообщения: 62
Зарегистрирован: 2014.03.17, 17:02
Контактная информация:

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

Сообщение geniy »

geniy писал(а): выходит ошибка EAuthException SSL certificate problem: self signed certificate in certificate chain
Использую wamp сервер, extension=php_curl.dll включен...
а всё, решил проблему.... два дня ушли.. жаль конечно, но это того стоило :)
для других людей, кто встретится с такой проблемой: дополняем строкой curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); в файле EAuthServiceBase.php в функции initRequest

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); - Решение получше
vitalko
Сообщения: 3
Зарегистрирован: 2012.09.29, 16:46
Откуда: Russia, Perm

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

Сообщение vitalko »

geniy писал(а):
geniy писал(а): выходит ошибка EAuthException SSL certificate problem: self signed certificate in certificate chain
Использую wamp сервер, extension=php_curl.dll включен...
а всё, решил проблему.... два дня ушли.. жаль конечно, но это того стоило :)
для других людей, кто встретится с такой проблемой: дополняем строкой curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); в файле EAuthServiceBase.php в функции initRequest
спасибо тебе, добрый человек ;)
german.igortcev
Сообщения: 251
Зарегистрирован: 2014.08.18, 14:01

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

Сообщение german.igortcev »

Еще косяк вылез после обновления Firefox до 32 версии (Mac) и не работает всплывающее окно при авторизации хотя параметр в настройках стоит true
Bury
Сообщения: 62
Зарегистрирован: 2014.02.09, 00:29

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

Сообщение Bury »

В конфиге указал только Facebook.
Всплывает окно, пароль вводится и после этого EAuthException: Protocol https not supported or disabled in libcurl

Как эта проблема решаеться?
Bury
Сообщения: 62
Зарегистрирован: 2014.02.09, 00:29

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

Сообщение Bury »

Catch говорит, что ошибка возникает тут:
if (curl_errno($ch) > 0)
throw new EAuthException(curl_error($ch), curl_errno($ch));
loveyoureternity
Сообщения: 1
Зарегистрирован: 2015.01.27, 12:48

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

Сообщение loveyoureternity »

прошу помогите, Изображение
devv
Сообщения: 39
Зарегистрирован: 2015.04.26, 22:37

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

Сообщение devv »

Развитие библиотеки прекращено?
Аватара пользователя
yiijeka
Сообщения: 3103
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

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

Сообщение yiijeka »

Делать в коде
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
не безопасно

Для того, что проверка работала:
- идём сюда http://curl.haxx.se/docs/caextract.html и качаем cacert.pem
- сохраняем его в c:\php\cacert.pem например
- добавляем в php.ini строку

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

curl.cainfo=c:\php\cacert.pem
Ответить