【发布时间】:2018-07-28 08:36:07
【问题描述】:
我在项目中使用了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>。
我很困惑发生了什么,办公室里类似的设置正在工作,但我是根据我能记得的内容实现的.. 似乎我错过了这一点。
【问题讨论】:
-
不是您问题的答案,但也许可以考虑查看 Flask-JWT-Extended:flask-jwt-extended.readthedocs.io/en/latest。 Flask-JWT 已经被废弃了一段时间了。
-
@vimalloc 让我头疼的是,当类似的设置在办公室工作时,为什么它现在不能在个人开发项目中工作。
标签: curl http-headers flask-jwt pyjwt flask-jwt-extended