python – flask-login出错
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – flask-login出错,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2396字,纯文字阅读大概需要4分钟。
内容图文
我很难使用Flask-Login框架进行身份验证.我尽可能彻底地查看了文档,但显然我遗漏了一些明显的东西.
class User():
def __init__(self, userid=None, username=None, password=None):
self.userid = userid
self.username = username
self.password = password
def is_authenticated(self):
return True
def is_active(self):
return True
def is_anonymous(self):
return False
def get_id(self):
return unicode(self.userid)
def __repr__(self):
return '<User %r>' % self.username
def find_by_username(username):
try:
data = app.mongo.db.users.find_one_or_404({'username': username})
user = User()
user.userid = data['_id']
user.username = data['username']
user.password = data['password']
return user
except HTTPException:
return None
def find_by_id(userid):
try:
data = app.mongo.db.users.find_one_or_404({'_id': userid})
user = User(data['_id'], data['username'], data['password'])
return user
except HTTPException:
return None
以上是我的User类,位于users / models.py中
login_manager = LoginManager()
login_manager.init_app(app)
login_manager.login_view = 'users.login'
@login_manager.user_loader
def load_user(userid):
return find_by_id(userid)
以上是我的用户加载器.
@mod.route('/login/', methods=['GET', 'POST'])
def login():
form = LoginForm()
if form.validate_on_submit():
pw_hash = hashlib.md5(form.password.data).hexdigest()
user = find_by_username(form.username.data)
if user is not None:
if user.password == pw_hash:
if login_user(user):
flash('Logged in successfully.')
return redirect(request.args.get('next') or url_for('users.test'))
else:
flash('Error')
else:
flash('Username or password incorrect')
else:
flash('Username or password incorrect')
return render_template('users/login.html', form=form)
没有明显的错误消息,但在尝试访问用@login_required修饰的任何视图时,它会将我重定向到登录表单.最好,我可以告诉,login_user函数实际上并没有工作,虽然它在我调用它时返回True.任何建议表示赞赏
解决方法:
经过调试器一段时间后,我终于解决了问题.
关键问题是我试图使用MongoDB集合中的_id参数作为用户ID.我没有意识到_id参数是ObjectID类型而不是我需要的字符串或unicode.
def find_by_username(username):
try:
data = app.mongo.db.users.find_one_or_404({'username': username})
user = User(unicode(data['_id']), data['username'], data['password'])
return user
except HTTPException:
return None
def find_by_id(userid):
try:
data = app.mongo.db.users.find_one_or_404({'_id': ObjectId(userid)})
user = User(unicode(data['_id']), data['username'], data['password'])
return user
修改这两个函数可以正确修复此错误.
内容总结
以上是互联网集市为您收集整理的python – flask-login出错全部内容,希望文章能够帮你解决python – flask-login出错所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。