2016-01-22 51 views
4

我的User类不是从UserMixin继承的,而是定义了它自己的成员和用于flask-login所必需的函数。只有当get_id()返回self.email时,flask-login才能工作.email

只有当我设置get_id()返回实例电子邮件时,登录过程才有效。如果我试图对用户的名称或实际的ID做到这一点,我没有得到一个错误,但我注意到我没有登录(我无法访问URL,需要我使用@required_login登录)

class User(db.Model): 
    id = db.Column(db.Integer,primary_key=True) 
    email = db.Column(db.Unicode(128)) 
    name = db.Column(db.Unicode(128)) 
    password = db.Column(db.Unicode(1024)) 
    authenticated = db.Column(db.Boolean, default=False) 
    posts = db.relationship('Post') 
    #-----login requirements----- 
    def is_active(self): 
     # all users are active 
     return True 

    def get_id(self): 
     # returns the user e-mail 
     return unicode(self.email) 

    def is_authenticated(self): 
     return self.authenticated 

    def is_anonymous(self): 
     # False as we do not support annonymity 
     return False 

编辑:当时问的问题我不明白get_id()需要与load_user()

@login_manager.user_loader 
def load_user(email): 
    return User.get_user(email) 
+1

发布您的用户加载程序也? – Busturdust

+1

'is_authenticated'应该表明用户是否已经登录。您将它视为一个像“is_active”这样独立的标志。你对'is_anonymous'有一个类似的误解:所有真实用户都被认证,这是为了表示一个代表未登录用户的对象。另外,'is_authenticated'和'is_anonymous'预计会被'@ property'装饰。 – davidism

+1

请[edit]包含[mcve]。 – davidism

回答

4

它只能这样,因为get_id()需要匹配login_manager.user_loader这在我的情况下,期待的电子邮件用户。

相关问题