[英]Login working but current_user not authenticated
我的登錄名有效,但是當前用戶未創建/未通過身份驗證。
登錄管理員:
@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_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)。 希望這對遇到類似問題的人有所幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.