我正在尝试使用angular 4和python来创建无状态登录令牌。我关注this tutorial,但这是我第一次使用python而且我有点困惑。
当我尝试测试方法时,我看到的错误是:
文件" G:\ Users \ Administrator \ flask-jwt-auth \ project \ tests \ test_user_model.py",第20行,在test_encode_auth_token中 auth_token = user.encode_auth_token(user.id) AttributeError:'用户'对象没有属性' encode_auth_token'
这是我的test_user_model.py
:
import unittest
from project.server import db
from project.server.models import User
from project.tests.base import BaseTestCase
class TestUserModel(BaseTestCase):
def test_encode_auth_token(self):
user = User(
email='test@test.com',
password='test'
)
db.session.add(user)
db.session.commit()
auth_token = user.encode_auth_token(user.id)
self.assertTrue(isinstance(auth_token, bytes))
if __name__ == '__main__':
unittest.main()
这是models.py
,其中encode_auth_token
实际定义。
import datetime
import jwt
from project.server import app, db, bcrypt
class User(db.Model):
""" User Model for storing user related details """
__tablename__ = "users"
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
email = db.Column(db.String(255), unique=True, nullable=False)
password = db.Column(db.String(255), nullable=False)
registered_on = db.Column(db.DateTime, nullable=True)
admin = db.Column(db.Boolean, nullable=False, default=False)
def __init__(self, email, password, admin=False):
self.email = email
self.password = bcrypt.generate_password_hash(
password, app.config.get('BCRYPT_LOG_ROUNDS')
).decode()
self.registered_on = datetime.datetime.now()
self.admin = admin
def encode_auth_token(self, user_id):
"""
Generates the Auth Token
:return: string
"""
try:
payload = {
'exp': datetime.datetime.utcnow() + datetime.timedelta(days=0, seconds=5),
'iat': datetime.datetime.utcnow(),
'sub': user_id
}
return jwt.encode(
payload,
app.config.get('SECRET_KEY'),
algorithm='HS256'
)
except Exception as e:
return e
我很感激能得到的所有帮助,因为我知道这是一个非常具体的问题。提前谢谢。