Доброго дня!
Есть проект, в котором реализована мультиязычность, по
этой статье
Т.е. ссылки имею вид
https://site.io/ru/profile |
https://site.io/en/profile | etc.
Есть экстеншен
Yii2 - authClient.
В настройках для экстеншена есть параметр
returnUrl в котором хранится ссылка,
на которую перенаправляется пользователь после удачной авторизации/регистрации.
Но вот в чём проблема, при редиректе на
https://site.io/auth?authclient=имя_соц_сети
я получаю ошибку:
Exception – yii\authclient\InvalidResponseException
Request failed with code: 401,
message: {"error":"invalid_grant","error_description":"Code is invalid or expired."}
А если указать для
returnUrl, какой либо язык:
https://site.io/ru/auth?authclient=имя_соц_сети
то всё ок, и ошибок нет. Но языков может быть чуть меньше чем дофига!
Пробовал припилить "костыль", в action который получает returnUrl,
разбивает его, добавляет текущий язык, и запиливает его обратно,
но это не помогло и ошибка всё равно появляется. Вот пример этого костыля:
public function actions() {
return [
'auth' => [
'class' => 'yii\authclient\AuthAction',
'successCallback' => [$this, 'onAuthSuccess'],
],
...
];
}
public function onAuthSuccess($client) {
$exploded_url = explode(Yii::$app->request->hostInfo . '/', $client->getReturnUrl());
$current_lang = Lang::getCurrent();
$new_return_url = Yii::$app->request->hostInfo . '/' . $current_lang->url . '/' . $exploded_url[1];
$client->setReturnUrl($new_return_url);
if ( (new AuthHandler($client))->handle() ) {
$this->redirect('profile');
}
}
Что самое забавное, в целом всё работает, т.е. не происходит только редирект.
Если вернуться "назад", и обновить страницу, то видно что авторизация/регистрация
выполнена.
В связи с этим вопрос:
Как красиво реализовать поддержку мультиязычность, с корректным редиректом?P.S. Или я что-то не понимаю?