Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 登录正在工作,但当前用户未通过身份验证_Python_Mongodb_Flask_Flask Login - Fatal编程技术网

Python 登录正在工作,但当前用户未通过身份验证

Python 登录正在工作,但当前用户未通过身份验证,python,mongodb,flask,flask-login,Python,Mongodb,Flask,Flask Login,我的登录正在工作,但当前用户未被创建/未通过身份验证 登录管理器: @login_manager.user_loader def load_user(username): #users is my mongodb collection user = users.find_one({"_id": username}) if not user: return None return User(user['_id']) 登录路径: @app.ro

我的登录正在工作,但当前用户未被创建/未通过身份验证

登录管理器:

@login_manager.user_loader
    def load_user(username):
    #users is my mongodb collection
    user = users.find_one({"_id": username})
    if not user:
       return None
    return User(user['_id'])
登录路径:

@app.route("/login", methods=['GET', 'POST'])
def login():

  login = LoginForm()

  if current_user.is_authenticated:
    return redirect(url_for('feed'))

  if login.submit.data and login.validate():
      #users is my mongodb collection
      user = users.find_one({"email": login.email.data})
      if user and User.validate_login(user['password'], login.password.data):
        user_obj = User(json_util.dumps(user['_id']))
        login_user(user_obj, remember=login.remember.data)
        flash(f'Login Successful, welcome {user["name"]}.', 'success')
        return redirect(url_for('feed'))
      else:
        flash('Login Unsuccessful. Please check email and password', 'warning')

  return render_template(
    'login.html',
    login=login
  )
用户类别:

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 self.username

@staticmethod
def validate_login(password_hash, password):
    return bcrypt.check_password_hash(password_hash, password)
进料路线:

@app.route("/feed")
def feed():

  if not current_user.is_authenticated:
    #flash(f'{current_user.is_authenticated} {current_user._id}', 'warning')
    return redirect(url_for('welcome'))

#etc etc 
登录后,用户将被重定向到提要路由,但由于未经身份验证,您将被重定向回

我已经看到会话被用来绕过这个问题,但是仍然对这个问题的解决方案感到好奇

我咨询过的资料来源:

解决方案: 我在load_用户中使用字符串而不是ObjectId搜索mongoDB。我解决了这个问题,转而使用用户输入的电子邮件进行搜索,它起了作用,我注意到了我的问题

@login_manager.user_loader
def load_user(user_id):
    user = users.find_one({"_id": ObjectId(user_id)})
    if not user:
        return None
    return User(str(user['_id'])
经验教训,弦乐!=ObjectId(s)。我希望这能帮助任何有类似问题的人