我正在为我的网站使用 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>