2017-01-17 42 views
0

我试图使用neo4j实现Flask登录。试图使用这个Flask Login Documentation来实现。使用neo4j实现Flask登录

我已经加入的四个方法的用户类

class User: 
    def __init__(self, username): 
     self.username = username 

    def is_authenticated(self): 
     return True 

    def is_active(self): 
     return True 

    def is_anonymous(self): 
     return False 

    def get_id(self): 
     return unicode(self.id) 

    def find(self): 
     user = graph.find_one("User", "username", self.username) 
     return user 

当我尝试调用login_user(用户)我得到错误

def login(): 
    if request.method == 'POST': 
     username = request.form['username'] 
     password = request.form['password'] 

     if not User(username).verify_password(password): 
      flash('Invalid login.') 
     else: 
      session['username'] = username 
      flash('Logged in.') 

      user = User(username).find() 
      login_user(user) 
      return redirect(url_for('index')) 

    return render_template('login.html') 

我得到这个错误

File "/../auth/view.py", line 134, in login
login_user(user)
File "/../lib/python3.4/site-packages/flask_login.py", line 709, in login_user
if not force and not user.is_active:
AttributeError: 'Node' object has no attribute 'is_active'

另外,我不确定如何定义加载用户回调函数。

@login_manager.user_loader 
def load_user(user_id): 
    return User.get(user_id) 

我找不到涵盖此主题的任何文档。有人可以帮助让这个工作或指向文档?

回答

0

find_one方法返回Node。你大概想要返回Nodeusername财产,而不是整个实体。所以你需要这样的东西:

def find(self): 
    user = graph.find_one("User", "username", self.username) 
    # TODO: handle the case where user is None (user not found) 
    return user["username"] 
+0

仍然没有解决问题。现在,我得到这个错误 - AttributeError:'str'对象没有属性'is_active'。我猜想,与Neo4j相比,用户类在其他数据库中的表现存在差异。看看login_user的定义,它会显示“记录一个用户,你应该把实际的用户对象传递给它”。它试图访问用户属性“user.is_active”。是否有可能返回Node的对象表示?例如,mongoDb“find_one”方法返回文档的对象表示 – jas