[英]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.