MODx чиним не работающую авторизацию в HybridAuth Vkontakte

Есть замечательный пакет HybridAuth для modx, он позволяет сделать авторизацию на сайте через разные сервисы и соц.сети при помощи протокола OAuth v2. Но вот незадача, он давно не обновлялся версия 2.0.4-pl от 10.04.2017, [ https://modstore.pro/packages/users/hybridauth ].

Может когда нибудь, Василий обновит пакет, но пока есть два варианты, отредактировать build пакет, указав в composer.json актуальную версию hybridauth, или просто заменить файл Vkontakte.php.



UPD
Василий обновил пакет [ https://modx.pro/components/16005 ], до версии 3RC, выставляте репозиторий simple dream и обновляйтесь, единственное во всех провайдерах надо изменить callback_uri c hauth_done на hauth.done!
А у ВКонтакте вообще сделать данное поле пустым, будет ругаться но все равно сохранит!



Самый простой заменить файл, его и опишу.

Берем файл [ https://github.com/hybridauth/hybridauth/blob/v2/additional-providers/hybridauth-vkontakte/Providers/Vkontakte.php ] и заменяем наш, который находится в MODx/core/components/hybridauth/vendor/hybridauth/hybridauth/hybridauth/Hybrid/Providers/Vkontakte.php

И вроде бы все хорошо и должно работать, но в Вконтакте в «redirect URI» запрещено указывать параметры


Поэтому пишем в Доверенный redirect URI: ваш.сайт/Vkontakte

Для обхода запрета на URI параметры предлагаю два варианта.

1 В .htaccess, перед основным rewrite правилом, добавляем
RewriteCond %{REQUEST_URI} Vkontakte [NC]
RewriteCond %{QUERY_STRING} (.*)
RewriteRule .* /?hauth_done=Vkontakte&%1 [R=301,L]
2. Ну или плагины, создаем customPlugin, не забываем отметить системное событие OnPageNotFound и вставляем следующий код:
<?php
switch($modx->event->name){
    case 'OnPageNotFound':
        $req = $modx->getOption('request_param_alias');
        if(preg_match('#Vkontakte#',$_GET[$req]) && isset($_GET['code'])){
            $url = $modx->getOption('site_url').'/?hauth_done=Vkontakte&code='.$_GET['code'];
            $modx->sendRedirect($url,array('responseCode' => 'HTTP/1.1 301 Moved Permanently'));
        }
    break;
}
Так же нам нужно что бы redirect url генерировался для Vkontakte подругому, поэтому открываем файл
MODx/core/components/hybridauth/vendor/hybridauth/hybridauth/hybridauth/Hybrid/Provider_Adapter.php
Находим строку:
$this->params["login_done"] = $HYBRID_AUTH_URL_BASE . ( strpos($HYBRID_AUTH_URL_BASE, '?') ? '&' : '?' ) . "hauth_done={$this->id}";
И меняем на
if (!isset($this->params["login_done"]) ) {
	if($this->id === 'Vkontakte')
		$this->params["login_done"] = $HYBRID_AUTH_URL_BASE . 'Vkontakte';
	else
		$this->params["login_done"] = $HYBRID_AUTH_URL_BASE . ( strpos($HYBRID_AUTH_URL_BASE, '?') ? '&' : '?' ) . "hauth_done={$this->id}";
}
Авторизация начнет работать :-)

Комментарии ()

  1. Вадим Зибирев 03 ноября 2019, 11:33 # 0
    Спасибо вам огромное, очень долго искал что нужно сделать, что бы исправить ошибку в авторизации, очень помогло!!!
    1. cloudsv 03 ноября 2019, 16:35 # 0
      Рад что пригодилось)

    Авторизация

    GitHubGoogleVkontakteYandex
    Есть вопрос или предложение пиши в Telegram @cloudsv

    MTProto прokси для Telegram

    Прямой эфир

    Diego mont 25 мая 2023, 07:04
    Полезные боты в Telegram 2
    cloudsv 24 апреля 2023, 17:56
    Обновление Scala Rider G4 52
    cloudsv 12 ноября 2022, 19:16
    Установка и настройка minidlna 3
    cloudsv 03 ноября 2022, 03:42
    Настройка прокси mtproto для Telegram 52
    cloudsv 03 января 2022, 10:50
    Let's Encrypt это легко и просто 4
    cloudsv 10 сентября 2020, 13:17
    MySQL Workbench падает при подключении 2
    cloudsv 05 августа 2020, 11:57
    Мне вчера стукнуло 34 4
    cloudsv 07 августа 2023, 22:56
    Linux Asus ROG x13 flow 2022 GV301RE и Linux 0
    cloudsv 15 апреля 2023, 16:23
    Linux Уведомление о смены workspace в X11 Linux 0
    cloudsv 17 октября 2020, 09:55
    Linux Отключить DHCP IPv6 в systemd 0
    cloudsv 30 июля 2020, 21:54
    О жизни Мне вчера стукнуло 34 4
    cloudsv 15 апреля 2020, 15:45
    Linux Основные hotkeys редактора Vim 0
    cloudsv 01 октября 2019, 08:00
    Linux Локальный редирект порта в Linux 0
    cloudsv 25 августа 2019, 16:14
    О жизни Социальная сеть от Яндекса Aura 0
    cloudsv 30 июля 2019, 21:34
    О жизни 33 year old 0
    cloudsv 25 июня 2019, 18:29
    Telegram Полезные боты в Telegram 2