当用户登录时,current_user 似乎显示另一个用户是登录的用户。这发生在生产中。我尝试通过打印 current_user id 和名称进行调试,在添加 app.logger 后,用户登录时会显示正确的用户,但是当我删除 app.logger 时,它会返回到相同的问题。这里可能是什么问题?也许缓存?
下面是登录后重定向到的路由
@admin.route('/website',methods=['POST','GET'])
@login_required
def website():
page = 'Dashboard'
form = ContentForm()
#for debbuging on gunicorn
print(f'current user id is {current_user.id}')
print(f'current user name is {current_user.name}')
if request.method == 'POST':
if form.validate():
#some code here
return 'ok'
return jsonify(form.errors), 400
return render_template('admin/website.html',page=page,form=form)
@admin.route('/login',methods=['GET','POST'])
def login():
if current_user.is_authenticated:
return redirect(url_for('admin.website'))
form = LoginForm()
redirect_url = '/website'
res = 'Invalid email or password'
if form.validate():
admin = User.query.filter_by(email=form.email.data).first()
if admin and check_password_hash(admin.password, form.password.data):
login_user(admin)
return jsonify(redirect_url)
return jsonify(res), 400
return render_template('admin/login.html', form=form)
和ajax登录代码
const login_form = document.getElementById('login_form')
const error = document.getElementById('error-message')
const fields = {
csrf_token: {
input: document.getElementById('csrf_token'),
error: document.getElementById('csrf_token-error')
},
name: {
input: document.getElementById('name'),
error: document.getElementById('name-error')
},
email: {
input: document.getElementById('email'),
error: document.getElementById('email-error')
},
password: {
input: document.getElementById('password'),
error: document.getElementById('password-error')
}
}
if(login_form){
login_form.addEventListener('submit', async (e) => {
e.preventDefault()
const response = await fetch('/login', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
csrf_token: fields.csrf_token.input.value,
email: fields.email.input.value,
password: fields.password.input.value })
})
if(response.ok){
const res = await response.json()
window.location.replace(res)
}
else {
error.setAttribute('class','bg-red-200 px-3 py-2 rounded-lg mb-3 text-red-900')
error.innerHTML = await response.json()
login_form.reset()
}
})
}
添加了用于调试的 app.logging.info
from app import create_app
import logging
app = create_app()
if __name__ == "__main__":
app.run()
else:
app.logger.info('This is an INFO message')
烧瓶登录
from app.models import User
@login_manager.user_loader
def load_user(user_id):
return User.query.get(user_id)
我在生产中使用 Gunicorn 作为服务器。
我可以确认用户看起来像其他用户一样登录的原因是因为缓存,我通过添加以下内容解决了这个问题:
@admin.after_request
def add_header(response):
response.headers["Cache-Control"] = "no-store, max-age=0"
return response
你能告诉你把代码放在哪里吗? @admin.after_request def add_header(响应): response.headers["Cache-Control"] = "no-store, max-age=0" 返回响应
我有同样的问题,但不知道你把代码放在哪里
我不能发表评论,因为我没有足够的信誉,请不要投反对票