Flask Login 不允许我访问 login_required 内容

问题描述 投票:0回答:0

我正在为我的网站使用 flask_login 编写登录功能。我已经为登录帖子编写了逻辑,我从我的 mySQL 数据库中提取用户,用它创建 flask_login 用户对象,检查成功的密码哈希,并打印出显示 true 的 user.is_active (这只能是如果 flask_login 知道用户已通过身份验证的情况)。

从这里我想重定向到我的用户仪表板“http://127.0.0.1:5000/dashboard”,它在路由上有 @login_required 装饰器,但是当我有那个装饰器时,它不会让我在登录后访问该页面in 而是将我重定向到这样的 url“http://127.0.0.1:5000/login?next=%2Fdashboard”。

没有装饰器,重定向工作正常。这几乎就像 flask 忘记了我登录。我在一个新的服务器上执行此操作,缓存干净,验证用户对象已登录等。为什么 flask_login 忘记我在尝试重定向时登录仪表盘?

这是我的登录路径:

login_manager = LoginManager()
login_manager.login_view = 'login'
login_manager.init_app(app)

@login_manager.user_loader
def load_user(email):
    return User.get_user(email)
@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        email = request.form['email']
        password = request.form['password']
        # cursor.execute("SELECT * FROM user_accounts WHERE email = %s", [email,])
        user = User.get_user(email)
        # user_data = cursor.fetchone()
        if user is not None and check_password_hash(user.password, password):
            print('success')
            # user = User(user_data[0], user_data[1], user_data[2], user_data[3], user_data[4])
            login_user(user)
            print(user.is_active)
            flash('Logged in successfully!', category='success')
            return redirect(url_for('dashboard'))
        else:
            print("error")
            flash('Incorrect email/password', category='error')
            return render_template('login.html')
    else:
        # return render_template('dashboard.html', user=current_user)
        return render_template('login.html')

我的仪表板路线:

@app.route('/dashboard')
@login_required
def dashboard():
    cursor.execute("SELECT * FROM open_instances WHERE user_id = 1 ;")
    instances = cursor.fetchall()
    if instances:
        response_data = [{'instance_id': row[0], 'post_interval': row[1], 'user_id': row[2], 'social_un': row[3], 'social_network': row[4]} for row in instances]
    else:
        response_data = []
    return render_template('dashboard.html', data=response_data)

我的用户类别:

connection, cursor = connect_to_db()

class User(UserMixin):
    def __init__(self, id, username, subscription, password, email):
        self.id = id
        self.username = username
        self.subscription = subscription
        self.password = password
        self.email = email

    @staticmethod
    def get_user(email):
        sql = "SELECT * FROM user_accounts WHERE email = %s;"
        val = (email,)
        cursor.execute(sql, val)
        row = cursor.fetchone()
        if row:
            return User(*row)
        return None

我的登录表格:

                <form action="/login" method = "POST">
                    <h1 align = "center" class="header_text" style="font-size: 32px;">Login</h1>
                    <div class = "form-group">
                        <label for="email">Email Address</label>
                        <input 
                        type="email" 
                        class="input" 
                        id="email" 
                        name ="email" 
                        placeholder="Enter email"
                        />
                    </div>
                    <div class = "form-group">
                        <label for="password">Password</label>
                        <input 
                        type="password" 
                        class="input" 
                        id="password" 
                        name ="password" 
                        placeholder="Enter password"
                        />
                    </div>
                    <br />
                    <button type="Submit" style="margin: 0px;" class="main__btn">Submit</button>
                </form>
javascript python flask flask-login
© www.soinside.com 2019 - 2024. All rights reserved.