Генерирование токена для flask-jwt с ошибкой неверного метода

Я использовал flask-JWT в моем проекте, и я объявил в controller.py:

def _validate_user(email, password):
    """
    validates user from db
    """
    user = Users.get_user(email)
    if check_password_hash(user.password_hash, password):
        return user
    else:
        return None


def verify(email, password):
    if not (email and password):
        return False
    valid_user = _validate_user(email, password)
    if valid_user:
        return valid_user


def identity(payload):
    user_id = payload["identity"]
    return {"userid", user_id}

а затем на API view.py модуль у меня есть это

from flask_jwt import JWT, jwt_required
from ..controller import (
    verify,
    identity
    )
jwt = JWT(app, verify, identity)

Я использую электронную почту в качестве концепции имени пользователя, если я не спрашиваю у пользователя его имя пользователя, а вместо этого использует адрес электронной почты пользователя в качестве имени пользователя, и я определил таблицу в models.py как это:

class Users(UserMixin, db.Model):
    """ Stores the user information
    """

    __tablename__ = "users"

    userid = db.Column(db.Integer, primary_key=True, autoincrement=True)
    email = db.Column(db.String(60), index=True, unique=True, nullable=False)
    password_hash = db.Column(db.String(255), nullable=False)
    registered_on = db.Column(db.DateTime, default=datetime.utcnow())
    authenticated = db.Column(db.Boolean, default=False)
    admin = db.Column(db.Boolean, nullable=False, default=False)

curl -H "Content-Type: application/json"  -u san@test.com:test -i -X GET http://127.0.0.1:5000/auth

но, используя приведенное выше, я получаю метод ошибки не допускается, если я пытаюсь использовать POST, я получаю сообщение об ошибке не удалось декодировать <p>Failed to decode JSON object: No JSON object could be decoded</p>,

Я очень смущен тем, что происходит, схожая настройка в офисе работала, но я реализовал то, что помню, на моей голове... кажется, мне не хватает бит.

1 ответ

Вроде поздний ответ, но я думаю, что ваша проблема в curl команда:

curl -H "Content-Type: application/json"  -u san@test.com:test -i -X GET http://127.0.0.1:5000/auth

-u опция используется, чтобы указать имя пользователя и пароль для аутентификации сервера, которая использует базовую аутентификацию HTTP, чтобы данные упаковывались в заголовки.

Библиотека JWT ожидает имя пользователя и пароль как JSON, поэтому:

  • Вы должны отправить запрос POST
  • Вы должны добавить имя пользователя и пароль в теле JSON

    curl --header "Content-Type: application/json" \
         --request POST \
         --data '{"username":"san@test.com","password":"test"}' \
         http://127.0.0.1:5000/auth
    
Другие вопросы по тегам