Внутренние запросы POST Flask к конечной точке Flask-Jwt /auth не выполняются

Я пришел к вам сегодня с проблемой, которая, кажется, раздражает и беспокоит меня в течение 1 недели (может быть, больше).

Я реализовал Flask и Flask-JWT, чтобы создать токен и использовать его в разных частях моего веб-приложения. Процесс такой: пользователь вводит учетные данные в форму, и когда он регистрируется, токен создается путем выполнения запроса POST к конечной точке Flask-JWT /auth.

Проблема в:

  • Когда пользователь вошел в систему, часть кода создания токена (запрос POST к конечной точке / auth), кажется, находится в бесконечном цикле.

Код останавливается на: "r = запросы.пост (url, заголовки = заголовки, данные = полезная нагрузка)"

Самое смешное, что если пользователь войдет в систему и после этого перейдет к конечной точке / auth, у него будет создан токен.

У кого-то уже была эта проблема?

Спасибо

Проект / config.py

JWT_EXPIRATION_DELTA = timedelta(seconds=900)
JWT_AUTH_URL_RULE = "/api/v1/auth"

SECURITY_PASSWORD_HASH = 'pbkdf2_sha512'
SECURITY_TRACKABLE = True
SECURITY_PASSWORD_SALT = "xxxx"

WTF_CSRF_ENABLED = True
WTF_CSRF_SECRET_KEY = "xxxx"

проект / приложение /init.py

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_login import LoginManager, login_required
from flask_bcrypt import Bcrypt
from flask_security import Security, SQLAlchemyUserDatastore, \
    UserMixin, RoleMixin, login_required
from flask_jwt import JWT, jwt_required
import os

app = Flask(__name__)
app.config.from_object('config')
bcrypt = Bcrypt(app)
db = SQLAlchemy(app)

# To have random secret key
secret_key = os.urandom(24)
app.secret_key = secret_key

from textr import views, models
from search_number import views
from buy_number import views
from users import views, models
from sms_receiver import views, models
from sms_sender import views, models
from phone_number import models, views

from users.models import User, Role

# Setup Flask-Security
user_datastore = SQLAlchemyUserDatastore(db, User, Role)
security = Security(app, user_datastore)

login_manager = LoginManager()
login_manager.init_app(app)
login_manager.login_view = "login"

@login_manager.user_loader
def load_user(user_id):
    return User.query.filter(User.id == int(user_id)).first()

from textr.tools import retreive_user, verify_password

def authenticate(username, password):
    user = retreive_user(username)
    if verify_password(username, password):
        return user

def identity(payload):
    return User.query.filter(User.id == payload['identity']).scalar()

jwt = JWT(app, authenticate, identity)

проект / приложение / пользователи /views.py

from flask_jwt import jwt_required, JWT
from models import User
from error_handling import error_400
from flask import Flask, request, render_template, jsonify, session, redirect, url_for, flash
import json
import requests

@app.route("/api/v1/login", methods=["GET", "POST"])
def login():
    error = None

    if request.method == 'POST':
        json_data = request.json
        if not json_data:
            username = request.form['username']
            password = request.form['password']
        else:
            username = json_data['username']
            password = json_data['password']

        if not check_user_present(username):
            return error_400('Error', 'User not found', 404)

        if verify_password(username, password):
            flash('Logged in successfully.')
            user = retreive_user(username)
            login_user(user)

            # Infos to create POST request for Token
            payload = ({'username':username, 'password':password})
            url = "http://127.0.0.1:8080/api/v1/auth"
            headers = {'Content-Type': 'application/json', 'charset': 'utf-8'}

            # Token creation
            r = requests.post(url, headers=headers, data=payload)
            response = r.json()

            if (r.status_code is 200):
                token = response['user']['authentication_token']
                session['api_session_token'] = token)
        else:
            flash('Wrong credentials!')
            return error_400('Error', 'Wrong credentials', 401)

    return render_template('users/login.html')

0 ответов

Другие вопросы по тегам