2

这是我尝试通过 Flask-login api 登录用户的代码。用户填写用户/密码并通过flask-api登录。我收到用户已登录的自定义消息,这意味着我有 g.user i 不是 none 和 g.user.is-autheticated=true。我还可以看到会话 cookie 和响应标头。

@lm.user_loader
def load_user(user_id):
    app.logger.info(str(User.query.get(int(user_id))))
    return User.query.get(int(user_id))

@app.before_request
def before_request():
    g.user = current_user

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True)
    email = db.Column(db.String(120), unique=True)
    password = db.Column(db.String(64))

    def __init__(self, username="", email="", password=""):
        self.username = username
        self.email = email
        self.password = password

    def is_authenticated(self):
        return True

    def is_active(self):
        return True

    def get_id(self):
       return self.id

    def __unicode__(self):
       return self.username


@app.route('/weblogin',methods=['GET', 'POST'])
def weblogin():
   app.logger.info(str(g.user))
   app.logger.info(str(g.user.is_authenticated()))


   if request.method == 'POST':
    usr = request.form['login']
    pwd = request.form['password']
    session['remember_me'] = request.form['remember_me']
    user=db.session.query(User).filter_by(username=usr).first()
    if user.password == pwd:
      remember_me = False
      if 'remember_me' in session:
        remember_me = session['remember_me']
        session.pop('remember_me', None)
      login_user(user, remember = remember_me)
      g.user=user
      app.logger.info(str(g.user))
      app.logger.info(str(g.user.is_authenticated()))
      app.logger.info(str(g.user.username))
      return str(current_user.is_authenticated())
      return "logging user in"
    else:
      return "wrong username password combination"
   elif g.user is not None and g.user.is_authenticated():
     return "you are already logger in"
   else:
     return render_template("login.html")

现在奇怪的是如果我尝试关闭窗口并打开一个新窗口。并转到登录页面,该应用程序有时无法对我进行身份验证。虽然我看到相同的 cookie 被发送到服务器。应用程序“有时”无法加载用户。我被重定向到登录页面,要求填写凭据。

在对应用程序进行了一些摆弄之后,我观察到如果我尝试刷新页面几次,应用程序能够很好地验证我的身份。我看到我已再次登录的消息。虽然我没有做任何不同的事情。

如果有人能指出我在这里做错了什么,那将非常感激。

谢谢

4

0 回答 0