flask_login @login_required 登录后继续重定向到登录页面
flask_login @login_required continues to redirect me to login page after login
@app.route('/login', methods=['GET', 'POST'])
def login():
form = LoginForm()
if form.validate_on_submit():
"""
flash('Login requested for user {}, remember_me={}'.format(
form.username.data, form.remember_me.data))
"""
# Checks if user name and password-hash are the same in the db (Log in). Else it will show error message
if user_name_exist(form.username.data) and get_password(form.username.data) == \
md5(form.password.data.encode()).hexdigest():
user = User.query.get(form.username.data)
login_user(user, remember=form.remember_me.data)
flash(current_user.is_authenticated)
return redirect(url_for('index'))
else:
form.showerror.text = "Password or User Name Incorrect"
return render_template('login.html', title='Login', form=form)
我确认用户已使用返回 True 的 current_user.is_authenticated 函数登录。但是我仍然无法访问带有@login_required 的页面。我做错了什么?
@app.route('/index')
@login_required
def index():
form = ShowRoomsForm()
return render_template('index.html', title='Home', form=form)
编辑:(登录管理器代码)
login = LoginManager(app)
login.login_view = 'login'
我能够解决这个问题。
问题是我的用户加载器函数是通过用户名而不是 id 获取用户。我把它改成按id,问题就解决了
这是修复:
@login.user_loader
def user_loader(user_id):
user = User.query.filter_by(id=user_id).first()
if user:
return user
return None
我能够解决这个问题。问题是我的用户加载器函数是通过用户名而不是 id 获取用户。我将其更改为按 id 并解决了问题这是解决方法:
@login.user_loader
def user_loader(user_id):
user = User.query.filter_by(id=user_id).first()
if user:
return user
return None
@app.route('/login', methods=['GET', 'POST'])
def login():
form = LoginForm()
if form.validate_on_submit():
"""
flash('Login requested for user {}, remember_me={}'.format(
form.username.data, form.remember_me.data))
"""
# Checks if user name and password-hash are the same in the db (Log in). Else it will show error message
if user_name_exist(form.username.data) and get_password(form.username.data) == \
md5(form.password.data.encode()).hexdigest():
user = User.query.get(form.username.data)
login_user(user, remember=form.remember_me.data)
flash(current_user.is_authenticated)
return redirect(url_for('index'))
else:
form.showerror.text = "Password or User Name Incorrect"
return render_template('login.html', title='Login', form=form)
我确认用户已使用返回 True 的 current_user.is_authenticated 函数登录。但是我仍然无法访问带有@login_required 的页面。我做错了什么?
@app.route('/index')
@login_required
def index():
form = ShowRoomsForm()
return render_template('index.html', title='Home', form=form)
编辑:(登录管理器代码)
login = LoginManager(app)
login.login_view = 'login'
我能够解决这个问题。 问题是我的用户加载器函数是通过用户名而不是 id 获取用户。我把它改成按id,问题就解决了 这是修复:
@login.user_loader
def user_loader(user_id):
user = User.query.filter_by(id=user_id).first()
if user:
return user
return None
我能够解决这个问题。问题是我的用户加载器函数是通过用户名而不是 id 获取用户。我将其更改为按 id 并解决了问题这是解决方法:
@login.user_loader
def user_loader(user_id):
user = User.query.filter_by(id=user_id).first()
if user:
return user
return None