@MaikMain
Начинающий backend - developer

Ошибка при авторизации через VK. Как исправить?

Доброго времени суток. Делаю авторизацию через соц. сети через расширение yiisoft/yii2-authclient. Настроил твиттер и ядекс, и авторизация прекрасно прошла.
Но проблема в том, что не могу сделать для ВКонтакте. Я добавил свой clientId и clientSecret в код, который приведен ниже. В конфиг добавил (по такому же образу настроил и твиттер с ядексом):
'vkontakte' => [
                    'class' => 'yii\authclient\clients\VKontakte',
                    'clientId' => '*******',
                    'clientSecret' => '*************',
                ],

У меня формируются ссылки вот на этой странице (Это все выводится на странице site.ru/login):
http://site.ru/auth/network/auth?authclient=vkontakte
http://site.ru/auth/network/auth?authclient=twitter
http://site.ru/auth/network/auth?authclient=yandex

В настройках приложения VK, есть такая форма:
5ae23daf38436290208366.png
Вопрос такой, что нужно ввести в поле "Доверенный redirect URI".
К примеру для Яндекса нужно было указать ссылку site.ru/auth/network/auth?authclient=yandex
Но VK говорит, что "Доверенный redirect URI, который будет передаваться при OAuth авторизации. Должен содержать протокол. Не может содержать URL параметры, фрагменты и относительные пути". Контакт даже не сохраняет ссылки имеющие GET параметр.
А если:
1. Ничего не писать в это поле то появляется ошибка:
array_shift() expects parameter 1 to be array, null given

И ссылается на файл: "vendor\yiisoft\yii2-authclient\clients\VKontakte.php"
2. site.ru/auth/network/auth - так же как и в пункте №1
3. site.ru/auth/network
4. site.ru/auth
5. site.ru/login
Эта ошибка выводится, когда пишешь пункты №3, 4, 5:
{"error":"invalid_request","error_description":"redirect_uri is incorrect, check application redirect uri in the settings page"}

Что мне написать?
За ранее большое спасибо))
  • Вопрос задан
  • 2540 просмотров
Решения вопроса 1
@jiimka
В общем, сам промучался с этой проблемой. Возможно, кому-то поможет (не претендую на лучший способ решения):
я поменял urlManager'e ссылку, чтобы она выглядела как
site.ru/auth/network/vkontakte
вместо
site.ru/auth/network/auth?authclient=vkontakte
Плюс пришлось переопределить один класс. И вуаля!
class AuthAction extends BaseAuthAction {
    protected function authOAuth2($client)
    {
        if ($client->getName() === 'vkontakte') {
            $client->setReturnUrl(Yii::$app->urlManagerFrontend->createAbsoluteUrl(['/user/sign-in/oauth/vkontakte']));
        }

        return parent::authOAuth2($client);
    }
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@imlegend
С какой-то версии ввели обязательный параметр v. В данном случае достаточно было просто переопределить метод.

/**
     * @inheritdoc
     */
    public function applyAccessTokenToRequest($request, $accessToken)
    {
        $data = $request->getData();

        $data['v'] = '3.0';
        $data['uids'] = $accessToken->getParam('user_id');
        $data['access_token'] = $accessToken->getToken();

        $request->setData($data);
    }
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы