Пожалуйста, прочитайте примечания, если вы беспокоитесь о потоке OAuth!
Согласно HTTP 302 Redirect - нужен ли текст сообщения? , вы может вернуть тело в 302 Redirect
. Действительно, RFC2616 не запрещает отправлять тело ответа.
Что ж, я не эксперт по Flask, но это должно сработать. Возвращает JSON в теле ответа 302 Redirect
. Обратите внимание, что вы также должны установить правильный заголовок Content-Type
(в моем примере это не сделано).
import json
from flask import Flask, redirect, Response
app = Flask(__name__)
def jsonResponseFactory(data):
'''Return a callable in top of Response'''
def callable(response=None, *args, **kwargs):
'''Return a response with JSON data from factory context'''
return Response(json.dumps(data), *args, **kwargs)
return callable
@app.route('/')
def hello_world():
token_info = {
'access_token': '...',
'refresh_token': '...',
'token_type': '...',
'expires_in': '...'
}
return redirect(
'http://localhost/about',
302,
jsonResponseFactory(token_info)
)
Кстати, если вашему клиенту нужно прочитать токен, он не должен автоматически следовать редирект! Кроме того, я не знаю, является ли 302 Redirect
лучшим ответом для вашей конечной точки обратного вызова OAuth. Но все это зависит от контекста.
Редактировать: Вот некоторые заметки после комментариев к комментариям.
- Вы не должны хранить токены в
localStorage
. Хорошее объяснение с сайта Auth0 . Кроме того, браузеры (начиная с Safari) теперь будут сбрасывать localStorage через 7 дней без взаимодействия с пользователем - Снова из Auth0 (и я полностью согласен) токен должен быть обработан на стороне сервера.
- Я оставлю свой ответ таким, какой он есть (даже если область действия не идеальна), потому что он фактически отвечает на ваш вопрос, связанный с HTTP.