我在项目中使用了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>
。
我很困惑正在发生的事情,办公室里的类似设置正在运作,但是我从记忆中实现了我的头脑......似乎我错过了一点。
答案 0 :(得分:0)
一个迟到的回复,但我想你的问题出现在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,所以:
您必须在JSON正文中添加用户名和密码
curl --header "Content-Type: application/json" \
--request POST \
--data '{"username":"san@test.com","password":"test"}' \
http://127.0.0.1:5000/auth