Я запускаю приложение FLASK, где я проверяю JWT в конечной точке индекса. Проблема в том, что я получаю 2 ответа при выполнении этой конечной точки.
127.0.0.1 - - [06/Dec/2018 17:38:21] "GET / HTTP/1.1" 302 -
127.0.0.1 - - [06/Dec/2018 17:38:21] "GET /home HTTP/1.0" 200 -
Мой код
@app.route('/')
def index():
try:
encoded_jwt=request.headers.get('jwt')
print(encoded_jwt)
secret = "-----BEGIN PUBLIC KEY----- ........"
claims = jwt.decode(encoded_jwt, secret)
print(type(claims))
import json
json_parse = json.loads(json.dumps(claims))
email = json_parse['http://wso2.org/claims/emailaddress']
print(email)
roles = json_parse['http://wso2.org/claims/role']
print(roles)
session['email'] = email
if ROLETAGOFADMIN in roles:
role="admin"
elif "" in roles:
role = "employee"
else:
role=None
session['role'] = role
if 'email' in session and (session['role'] == "admin" or session['role'] == "employee" )and request.method == "GET":
if 'lastpage' in session:
lastpage=session['lastpage']
print(lastpage)
session.pop('lastpage')
return redirect(lastpage)
else:
return redirect(url_for('home'))
else:
return "Sorry. Unfortunately You have no access."
except Exception as e:
return redirect(url_for('error'))
Мой идентификационный сервер перенаправляется из-за первого ответа. Я не мог найти способ это исправить. Я не знаю, что ошибка произошла из-за попытки catch. Пожалуйста, помогите мне.
Вы используете redirect
Flask для выдачи перенаправления, которая собирается отправить ответ 302 клиенту с заголовком Location
указывается, что клиент отправляется в /home
вместо этого. Затем клиент должен отправить запрос на этот новый URL-адрес, где клиент, наконец, получит код ответа 200. Вот почему вы видите два запроса и коды ответов 302 и 200 в журналах сервера.
Эта конкретная строка вызывает перенаправление:
return redirect(url_for('home'))
Похоже, вы ожидали, что redirect
будет просто отображать содержимое /home
и вернуть его как ответ с исходным запросом /
(например, один ответ 200). Если это то, что вы действительно хотите, вместо этого вы можете использовать render_template
(или все, что вы используете в /home
для рендеринга вашего контента), чтобы напрямую отображать эту страницу. Тем не менее, я бы порекомендовал сохранить поведение перенаправления по своему усмотрению.
index()
маршрут простоreturn 'OK!'
вместо перенаправления на/home
?