Задать вопрос
birdy90
@birdy90

Использование символа # в django urls.py?

Доброго времени суток.
Пытаюсь настроить OAuth от Яндекса, возникла следующая проблема: авторизация проходит, но после этого идет переадресация на указанную в настройках страницу с набором параметров (где есть и токен), идущих через символ решетки. Например так:
http://mysite.my/receive_token#access_token=<token>&token_type=bearer&...

В urls я пытаюсь принять этот адрес:
url('^receive_token#access_token=(?P<token>.+?)&.*$', 'receive_token')

Проблема в том, что django отбрасывает всё после этой решетки и пытается найти адрес http://mysite.my/receive_token, чего у него, естественно, не получается сделать.
Что я делаю не так?

П.С. Пытался использовать code вместо token (он приходит в обычном GET запросе без решетки и отлично вытаскивается из адреса), но в API яндекс.метрики не нашел возможность использовать что-то кроме авторизационного токена.
  • Вопрос задан
  • 3010 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 2
qmax
@qmax
программер
Идентификаторы фрагментов не отсылаются на сервер. Вообще никогда.
В RFC лезть лень, но идея такая, что URLы отличающиеся только фрагментом, считаются ссылающимися на один и тотже документ (но на разные его части), и поэтому серверу до этого нет никакого дела.

Механизм oauth, который вы пытаетесь использовать, предназначен для клиентской (жаваскриптовой) авторизации в каких-нибудь виджетах и кнопках.
Для серверной авторизации существует другой механизм, в котором token передаётся по-другому.
Ответ написан
Комментировать
mututunus
@mututunus
Backend developer (Python, Golang)
Тоже сталкивался с такой проблемой при работе с API Яндекса.
Решение: получать сначала код (response_type=code), а потом уже из него токен.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
то что после решетки и саму решетку не джанга отбрасывает а браузер
Ответ написан
Комментировать
ali_aliev
@ali_aliev
Разработчик на Django/Python, JavaScript
Еще можно попробовать поставить r (сырая строка) перед строкой:

url(r'^receive_token#access_token=(?P<token>.+?)&.*$', 'receive_token')
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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