Я работаю с токенами и, в основном, когда я использую их на почтальоне, все работает нормально, я получаю хорошие ответы. Итак, теперь у меня есть 2 страницы: 1 защищенная, 2 незащищенная, для которой не требуется токен. Для получения токена вам необходимо успешно авторизоваться. Если я пытаюсь получить доступ к защищенной странице без авторизации, я получаю JSON ответ в сети, что токен отсутствует, но после авторизации он не показывает никаких ответов. Кроме того, я думал, что это может быть проблема с куки, в заголовках почтальона у меня есть заголовок токена, который работает, когда я делаю запрос, но я думаю, тогда я должен получить JSON ответ, что токен отсутствует
В моем редакторе я вижу, что когда я делаю запрос в Интернете, я получаю - "GET / protected HTTP / 1.1" 401 -
при работе с почтальоном - "GET / protected HTTP / 1.1 "200 -
Мой код:
def token_required(f):
@wraps(f)
def decorated(*args, **kwargs):
token = None
if 'x-access-token' in request.headers:
token = request.headers['x-access-token']
if not token:
return jsonify({'message': 'Token is missing'}), 401
try:
data = jwt.decode(token, app.config['SECRET_KEY'])
current_user = User.query.filter_by(public_id=data['public_id']).first()
except jwt.DecodeError:
return jsonify({'message': 'Token is missing'}), 401
except jwt.exceptions.ExpiredSignatureError:
return jsonify({'message': 'Token has expired'}), 401
return f(current_user, *args, **kwargs)
return decorated
@app.route('/login')
def login():
auth = request.authorization
if not auth or not auth.username or not auth.password:
return make_response('Could not verify', 401, {'WWW-Authenticate': 'Basic realm="Login required!"'})
user = User.query.filter_by(username=auth.username).first()
if not user:
return make_response('Could not verify', 401, {'WWW-Authenticate': 'Basic realm="Login required!"'})
if check_password_hash(user.password, auth.password):
token = jwt.encode({'public_id': user.public_id, 'exp': datetime.datetime.now() + datetime.timedelta(minutes=30)}, app.config['SECRET_KEY'])
return jsonify({'token': token.decode('UTF-8')})
return make_response('Could not verify', 401, {'WWW-Authenticate': 'Basic realm="Login required!"'})
@app.route('/protected')
@token_required
def home_page(current_user):
return jsonify({'status': 'protected'})
@app.route('/unprotected')
def home_page2():
return jsonify({'status': 'unprotected'})