Есть замечательный пакет
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}";
}
Авторизация начнет работать :-)
Комментарии ()