![](/img/trans.png)
[英]current_user.is_authenticated always False (TACACS and flask_login)
[英]current_user.is_authenticated not working on flask_login
我正在使用 flask_login 进行身份验证,而我的登录名中的某些内容不起作用。 事实上 current_user 属性总是假的(或anonymousUserMixin ...)我试图改变一些东西,但它没有工作。 我认为 login_user(user) 部分有问题
@login_manager.user_loader
def load_user(user_id):
try:
return User.query.get(user_id)
except:
return None
这是我的登录路由:
@app.route('/login', methods=['GET', 'POST'])
def login():
if current_user.is_authenticated:
return redirect('profile', username=current_user.user_id)
form = LoginForm()
if form.validate_on_submit():
email = form.email.data
user = User.query.filter_by(email=email).first()
pass_hashed = form.password.data
if user:
flash("user.password, pass_hashed" + user.password + " " + pass_hashed, category="error")
if pass_hashed == user.password:
usr = UserData.query.filter_by(email=email).first()
login_user(user, remember=form.remember.data)
session['username'] = usr.username
next = request.args.get('next')
# if not is_safe_url(next):
# return abort(400)
# return redirect(next or url_for('index'))
username = usr.username
return redirect(url_for('profile', username=username))
flash("wrong password", category="error")
return redirect(url_for('login'))
flash("invalid email", category="error")
return redirect(url_for('login'))
return render_template('login.html', form=form)
这个是我的用户 model:
class User(db.Model, UserMixin):
__tablename__ = 'user'
user_id = db.Column(db.Integer(), autoincrement=True)
email = db.Column(db.String(120), primary_key=True, unique=True, nullable=False)
password = db.Column(db.String(200), nullable=False)
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.user_id)
def get(self, id):
return unicode(self.user_id)
def __repr__(self):
return '<Email %r>' % self.email
def check_password(self, password):
if self.password == password:
return True
else:
return False
任何帮助表示赞赏。
非常感谢
我有几个建议:尝试改变
@login_manager.user_loader
def load_user(user_id):
try:
return User.query.get(user_id)
except:
return None
至:
@login_manager.user_loader
def load_user(user_id):
return User.query.filter(User.id == user_id).first()
尽管文档使用.get()
,但我在某些地方读到 SQLAlchemy 可能由于 Unicode 的事情而存在一些问题。 进行此更改可能足以使其正常工作。
另一个建议是,如果您实际上并未更改UserMixin
方法,则不要覆盖它们。 (谈论您实际上不需要实现的 is_* 方法)
还有一点需要注意的是:
如果您检查get_id()
方法的UserMixin
实现,它使用text_type
来转换 id。 也许也可以尝试使用它而不是内置的unicode
。
如果没有任何效果,最后的解决方案是将您的User
id 字段从user_id
(这有点多余,IMO)更改为id
,因为如果这是 model 标识符,FlaskLogin 知道如何按原样处理它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.