Flask-login 当前用户在页面上消失 refresh/redirect
Flask-login current user disappearing on page refresh/redirect
我有一个登录路径:
@bp.route('/login', methods=['GET', 'POST'])
def login():
form = LoginForm()
if form.validate_on_submit():
guest = Guest(**mongo.db.guests.find_one({'username': form.username.data}))
if guest is None or not guest.check_password(form.password.data):
flash('Invalid username or password')
return redirect(url_for('auth.login'))
login_user(guest, remember=form.remember_me.data)
print(current_user)
flash(f'Logged in {guest.name} successfully')
next_url = request.args.get('next')
if not next_url or url_parse(next_url).netloc != '':
next_url = url_for('main.index')
return redirect(next_url)
return render_template('login.html', form=form)
当用户在 'successfully' 中登录时,它会闪烁并正确重定向用户。但是在目标页面(main.index 或 profile.view)上,用户未登录。
索引route/html
@bp.route('/')
def index():
return render_template('index.html')
{% block content %}
<h2>Home page</h2>
<h1>Hi, {{ current_user.username }}!</h1>
<p><a href={{ url_for('auth.register') }}>Register</a></p>
<p><a href={{ url_for('auth.login') }}>Sign in</a></p>
<p><a href={{ url_for('main.index') }}>Home page</a> (accessible to anyone)</p>
<p><a href={{ url_for('profile.view') }}>Profile View</a> (login required)</p>
<p><a href={{ url_for('profile.edit') }}>Profile Edit</a> (login required)</p>
{% endblock %}
当重定向到 profile.view
@bp.route('/view')
@login_required
def view():
return 'This is the profile view'
它命中@login_required装饰器并重定向回登录。
我正在为我的数据库使用 Flask-login (duh) 和 Flask-Pymongo。
为什么 flask-login 当前用户在页面 refresh/redirect 上消失了?谢谢!
我的@login_manager.user_loader
方法不正确。
已更改:
@login_manager.user_loader
def load_user(user_id):
from flaskr.models import Guest
guest = mongo.db.guests.find_one({'_id': user_id})
if guest is None:
return None
return Guest(**guest)
收件人:
@login_manager.user_loader
def load_user(user_id):
from flaskr.models import Guest
from flask_pymongo import ObjectId
guest = mongo.db.guests.find_one({'_id': ObjectId(user_id)})
if guest is None:
return None
return Guest(**guest)
数据库搜索总是失败,因为 user_id
不是 Flask_Pymongo.ObjectId
。
我有一个登录路径:
@bp.route('/login', methods=['GET', 'POST'])
def login():
form = LoginForm()
if form.validate_on_submit():
guest = Guest(**mongo.db.guests.find_one({'username': form.username.data}))
if guest is None or not guest.check_password(form.password.data):
flash('Invalid username or password')
return redirect(url_for('auth.login'))
login_user(guest, remember=form.remember_me.data)
print(current_user)
flash(f'Logged in {guest.name} successfully')
next_url = request.args.get('next')
if not next_url or url_parse(next_url).netloc != '':
next_url = url_for('main.index')
return redirect(next_url)
return render_template('login.html', form=form)
当用户在 'successfully' 中登录时,它会闪烁并正确重定向用户。但是在目标页面(main.index 或 profile.view)上,用户未登录。
索引route/html
@bp.route('/')
def index():
return render_template('index.html')
{% block content %}
<h2>Home page</h2>
<h1>Hi, {{ current_user.username }}!</h1>
<p><a href={{ url_for('auth.register') }}>Register</a></p>
<p><a href={{ url_for('auth.login') }}>Sign in</a></p>
<p><a href={{ url_for('main.index') }}>Home page</a> (accessible to anyone)</p>
<p><a href={{ url_for('profile.view') }}>Profile View</a> (login required)</p>
<p><a href={{ url_for('profile.edit') }}>Profile Edit</a> (login required)</p>
{% endblock %}
当重定向到 profile.view
@bp.route('/view')
@login_required
def view():
return 'This is the profile view'
它命中@login_required装饰器并重定向回登录。
我正在为我的数据库使用 Flask-login (duh) 和 Flask-Pymongo。
为什么 flask-login 当前用户在页面 refresh/redirect 上消失了?谢谢!
我的@login_manager.user_loader
方法不正确。
已更改:
@login_manager.user_loader
def load_user(user_id):
from flaskr.models import Guest
guest = mongo.db.guests.find_one({'_id': user_id})
if guest is None:
return None
return Guest(**guest)
收件人:
@login_manager.user_loader
def load_user(user_id):
from flaskr.models import Guest
from flask_pymongo import ObjectId
guest = mongo.db.guests.find_one({'_id': ObjectId(user_id)})
if guest is None:
return None
return Guest(**guest)
数据库搜索总是失败,因为 user_id
不是 Flask_Pymongo.ObjectId
。