对象在flask-jwt-auth中没有属性

时间:2018-01-03 09:58:46

标签: python angular jwt

我正在尝试使用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

我很感激能得到的所有帮助,因为我知道这是一个非常具体的问题。提前谢谢。

0 个答案:

没有答案