python - 登录工作但 current_user 未通过身份验证
问题描述
我的登录正在工作,但当前用户未创建/未经过身份验证。
登录管理员:
@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
登录后,用户将被重定向到 feed 路由,这可行,但是由于未通过身份验证,您将被重定向回来。
我已经看到 session 被用来解决这个问题,但仍然对这个问题的解决方案感到好奇。
我咨询过的资料来源:
解决方案
解决方案:我在 load_user 中使用字符串而不是 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)。我希望这可以帮助遇到类似问题的任何人!
推荐阅读
- oracle - oracle 循环处理用户定义的异常
- css - ASP NET Web 应用程序 css 脚本不再加载
- clojure - 如何在 cljs 宏中管理依赖项?
- jsf - 复合组件不支持事件 null
- c# - 我无法在 ASP.NET Core 中创建迁移。解决办法是什么?
- arduino - 如何使用 esp32 ulp 中断脉冲计数器和周期性唤醒深度睡眠模式
- spring-boot - 当我们使用 LinearStateQueryCriteria 按线性 id 查询时,Corda 4.3 客户端 rpc 抛出错误
- string - Pandas 数据框,将列与子字符串列表匹配,连续行,仅保留子字符串
- c++ - 初始化 std::variant
? - ios - 如何制作可点击的表格视图和方法 didSelectRowAt