我已经定义了一个从UserMixin继承的用户类
class User(UserMixin):
ID = 1
def __init__(self, username, password, email, role):
self.id = User.ID
self.username = username
self.password = password
self.email = email
self.role = role
User.ID += 1
def __repr__(self):
return '<User %r>' % self.username
def verify_password(self, raw_password):
return check_password_hash(self.password, raw_password)
class AdminSet(object):
admin1 = User(username='admin1', password=generate_password_hash('admin1', method='pbkdf2:sha1', salt_length=5),
email='admin1@admin.com', role=0)
admin2 = User(username='admin2', password=generate_password_hash('admin2', method='pbkdf2:sha1', salt_length=5),
email='admin2@admin.com', role=1)
admin_list = [admin1, admin2]
@classmethod
def add(cls, user):
cls.admin_list.append(user)
@classmethod
def commit(cls, **kwargs):
admin = User(**kwargs)
cls.admin_list.append(admin)
@classmethod
def delete(cls, user_id):
pass
@classmethod
def searchID(cls, id):
for admin in cls.admin_list:
if admin.id == id:
return admin
return None
@classmethod
def queryFirst(cls, username):
for admin in cls.admin_list:
if admin.username == username:
return admin
return None这是我的登录网址和main.index
@auth.route('/login', methods=['GET', 'POST'])
def login():
form = LoginForm()
if form.validate_on_submit():
print('password:', form.password.data)
# try:
user = AdminSet.queryFirst(form.username.data)
if user.verify_password(form.password.data):
print("same")
login_user(user)
print(current_user)
return redirect(url_for('main.index'))
else:
print("different")
flash('wrong')
# except:
# print("exception")
# flash('用户名或密码错误')
return render_template('auth/login.html', form=form)
@main.route('/index', methods=['GET'])
@login_required
def index():
return render_template('main/index.html')当我登录时,我从控制台得到的信息如下:
127.0.0.1 - - [16/May/2022 00:37:10] "POST /login?next=%2F HTTP/1.1" 302 -
same
<User 'admin1'>
127.0.0.1 - - [16/May/2022 00:37:10] "GET /static/login/styles.css HTTP/1.1" 304 -
127.0.0.1 - - [16/May/2022 00:37:10] "GET /static/login/demo.css HTTP/1.1" 304 -
127.0.0.1 - - [16/May/2022 00:37:10] "GET /static/login/loaders.css HTTP/1.1" 304 -
127.0.0.1 - - [16/May/2022 00:37:10] "GET /static/js/login/jquery.min.js HTTP/1.1" 304 -
127.0.0.1 - - [16/May/2022 00:37:10] "GET /static/js/login/jquery-ui.min.js HTTP/1.1" 304 -
127.0.0.1 - - [16/May/2022 00:37:10] "GET /static/layui/layui.js HTTP/1.1" 304 -
127.0.0.1 - - [16/May/2022 00:37:10] "GET /static/js/login/stopExecutionOnTimeout.js?t=1 HTTP/1.1" 304 -
127.0.0.1 - - [16/May/2022 00:37:10] "GET /static/js/login/Particleground.js HTTP/1.1" 304 -
127.0.0.1 - - [16/May/2022 00:37:11] "GET /index HTTP/1.1" 302 -您可以看到用户已成功加载和打印,并执行代码return redirect(url_for('main.index'))。
然后,页面再次被重定向到auth.login。
我没有选择数据库是出于某种原因,我不知道我的代码是否有问题,我使用调试器来检查login_user()函数,但是我没有得到任何有用的信息。
发布于 2022-05-16 02:38:45
问题是user_loader回拨时出错了
这是最初的版本
@login_manager.user_loader
def load_user(user_id):
return AdminSet.searchID(user_id)在user_id上做一个小小的改动
@login_manager.user_loader
def load_user(user_id):
return AdminSet.searchID(int(user_id))很好用!
https://stackoverflow.com/questions/72250349
复制相似问题