python - 登录后,flask_login @login_required 继续将我重定向到登录页面

标签 python flask flask-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)

我确认用户已使用 current_user.is_authenticated 函数登录,该函数返回 True。但我仍然无法访问带有@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

关于python - 登录后,flask_login @login_required 继续将我重定向到登录页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61126532/

相关文章:

python - 从零开始的 numpy 形状是什么意思

Flask 不会自动重定向到登录页面

python - Flask 与事件循环相结合

python - Flask 登录无需持久化

python - 在测试期间以编程方式登录 Flask

python - 一维 np 数组 : how to make it more NumPy-thonic? 上切片的平均值

python - 检索一个国家的城市列表

python - 打印带间距的文本金字塔

python - 无法安装flask-mysqldb

python - Azure 默认日志