Yii2 Rest + CORS + авторизация по токен
Yii2 Rest + CORS + авторизация по токен
Добрый день.
Столкнулся со следующей проблемой.
Мой клиент отправляет запрос по следующему алгоритму, описанному здесь http://www.pixelcom.crimea.ua/sozdat-cors-zapros.html
То есть мой запрос выглядит так - я отправляю GET-запрос, а к нему добавляется еще OPTIONS
Сейчас у меня вываливается ошибка 405 Method Not Allowed:
Как настроить yii2 CORS, чтобы он пропускал запрос?
Столкнулся со следующей проблемой.
Мой клиент отправляет запрос по следующему алгоритму, описанному здесь http://www.pixelcom.crimea.ua/sozdat-cors-zapros.html
То есть мой запрос выглядит так - я отправляю GET-запрос, а к нему добавляется еще OPTIONS
Сейчас у меня вываливается ошибка 405 Method Not Allowed:
Как настроить yii2 CORS, чтобы он пропускал запрос?
- Вложения
-
- method-not-allowed.png (47.67 КБ) 10297 просмотров
-
- request.png (28.49 КБ) 10297 просмотров
Re: Yii2 Rest + CORS + авторизация по токен
Клиент осуществляет междоменный запрос через браузер -поэтому у меня OPTIONS вместо GET
если настраивать в контроллере $behaviors['verbFilter'], то не проходит авторизацию по токену
Я использую Bearer- то есть заголовок с клиента уходит такой:
Authorization: Bearer token_value
Однако в этом случае авторизация по токену не проходит - он его просто не видит
Если рубить функцию public function beforeAction($event) в VerbFilter - все работает
и заголовок проходит и аутентификация по токену.
если настраивать в контроллере $behaviors['verbFilter'], то не проходит авторизацию по токену
Я использую Bearer- то есть заголовок с клиента уходит такой:
Authorization: Bearer token_value
Однако в этом случае авторизация по токену не проходит - он его просто не видит
Если рубить функцию public function beforeAction($event) в VerbFilter - все работает
и заголовок проходит и аутентификация по токену.
Re: Yii2 Rest + CORS + авторизация по токен
почему?dr78 писал(а): если настраивать в контроллере $behaviors['verbFilter'], то не проходит авторизацию по токену
Re: Yii2 Rest + CORS + авторизация по токен
class HttpBearerAuth->public function authenticate
$authHeader = $request->getHeaders()->get('Authorization') - выдает null
и разумеется аутентификация не пройдена...
Почему $request->getHeaders()->get('Authorization') в этом случае null и какое отношение это имеет к $behaviors['verbFilter'] - я не понимаю
$authHeader = $request->getHeaders()->get('Authorization') - выдает null
и разумеется аутентификация не пройдена...
Почему $request->getHeaders()->get('Authorization') в этом случае null и какое отношение это имеет к $behaviors['verbFilter'] - я не понимаю
Re: Yii2 Rest + CORS + авторизация по токен
посмотрите на заголовки, отправляемые клиентом - есть ли там Authorization. Подебажьте чуток. "почему-то не работает" и "какое отношение - не понимаю" - это несерьезный подход.dr78 писал(а):class HttpBearerAuth->public function authenticate
$authHeader = $request->getHeaders()->get('Authorization') - выдает null
и разумеется аутентификация не пройдена...
Почему $request->getHeaders()->get('Authorization') в этом случае null и какое отношение это имеет к $behaviors['verbFilter'] - я не понимаю
Re: Yii2 Rest + CORS + авторизация по токен
Вот уж такого ответа я точно не ожидал, спасибо за помощь....
P.S.
подебажил, воткнул костыль, времени разбираться пока нет, пошел дальше
Считаю, что если Rest включен в ядро, то дебажить уже как-бы нечего как и костыли лепить.
Заголовок от клиента уходит и аутентификация проходит.
Это для меня главное, хотя я понимаю что реализация у меня неверная.
Поэтому и обратился за помощью.
Ломать копья и холиварить - нету времени увы)
Re: Yii2 Rest + CORS + авторизация по токен
какого ответа вы не ожидали?)dr78 писал(а):
Вот уж такого ответа я точно не ожидал, спасибо за помощь....
P.S.
подебажил, воткнул костыль, времени разбираться пока нет, пошел дальше
Считаю, что если Rest включен в ядро, то дебажить уже как-бы нечего как и костыли лепить.
Заголовок от клиента уходит и аутентификация проходит.
Это для меня главное, хотя я понимаю что реализация у меня неверная.
Поэтому и обратился за помощью.
Ломать копья и холиварить - нету времени увы)
вы пожаловались, что у вас что-то не работает. На скрине видно, что вам дают отлуп, т.к. вы обращаетесь к экшну неразрешенным методом (OPTIONS). CORS тут не причем, т.к. проверку делает другой фильтр. Я вам дал ссылку на метод, где указаны разрешенные методы, предлагая расширить их количество засчет добавления OPTIONS. Вы написали что не работает и вы ничерта не понимаете. Как еще вам помочь?
Да, REST есть в yii2, но он тут не причем.
Re: Yii2 Rest + CORS + авторизация по токен
Все, спасибо за помощь.
Предлагаю диалог закрыть и каждому остаться при своем мнении.
Тему пока оставляю - с надеждой, что кто-то уже сталкивался с подобным вопросом.
Предлагаю диалог закрыть и каждому остаться при своем мнении.
Тему пока оставляю - с надеждой, что кто-то уже сталкивался с подобным вопросом.
Re: Yii2 Rest + CORS + авторизация по токен
а какое ваше мнение? я не вижу его. Вы выставляете дискуссию в конфликтном ключе, хотя не вижу тут повода для конфликта. "Не работает" - это конец темы, если не предоставлена дополнительная информация.dr78 писал(а):Все, спасибо за помощь.
Предлагаю диалог закрыть и каждому остаться при своем мнении.
Тему пока оставляю - с надеждой, что кто-то уже сталкивался с подобным вопросом.
Re: Yii2 Rest + CORS + авторизация по токен
На самом деле CORS тут отыгривает большую роль. Если Вы делаете межсайтовый запрос, то, по умолчанию, с браузера сначала отсылается запрос типа OPTIONS. На него можно просто ответить кодом 200. По умолчанию у Yii2 REST так и сделано. Если у Вас не работает, значит Вы неправильно урлы настроили. Не знаю какая у Вас там реализация, но, к примеру, это:
Лучше заменить вот этим:
В таком случае запрос типа OPTIONS поступит на дефолтный экшн actionOptions класса yii\rest\ActiveController и тот обработает его нужным образом. Естественно Ваш контроллер должен быть унаследован от yii\rest\ActiveController.
Код: Выделить всё
'GET v2/search/item' => 'v2/item/index',
'POST v2/search/item' => 'v2/item/create',
'GET v2/search/item/<id:[\w-]+>' => 'v2/item/view',
'PUT v2/search/item/<id:[\w-]+>/status' => 'v2/item/update-status',
Код: Выделить всё
[
'class' => \yii\rest\UrlRule::class,
'pluralize' => false,
'controller' => [
'v2/search/item' => 'v2/item',
],
'extraPatterns' => [
'PUT,PATCH <id:[\w-]+>/status' => 'update-status',
],
],