我的模型文件是这样的
from app import db, b_crypt
class Base(db.Model):
__abstract__ = True
id = db.Column(db.Integer, primary_key=True)
date_created = db.Column(db.DateTime, default=db.func.current_timestamp())
date_modified = db.Column(db.DateTime, default=db.func.current_timestamp(), onupdate=db.func.current_timestamp())
class User(Base):
__tablename__ = 'auth_user'
# User Name
name = db.Column(db.String(128), nullable=False)
# Identification Data: email & password
email = db.Column(db.String(128), nullable=False, unique=True)
password = db.Column(db.String, nullable=False)
# Authorisation Data: role & status
role = db.Column(db.Boolean, nullable=False)
status = db.Column(db.Boolean, nullable=False)
# New instance instantiation procedure
def __init__(self, name, email, password, role, status):
self.name = name
self.email = email
self.password = b_crypt.generate_password_hash(password)
self.role = role
self.status = status
def __repr__(self):
return '<User %r>' % self.name
我的蓝图视图功能
from app.blueprints.authentication.models import User
# Import tools
from app.blueprints.tools.db import is_authenticated, is_registered, add_user_to_database
@auth.route('/login', methods=['POST'])
def login():
email = request.form['eml']
password = request.form['pwd']
if is_registered(email):
if is_authenticated(email, password):
session['logged_in'] = True
session['user'] = User.query.filter_by(email=email).first().username
return redirect(url_for('index'))
else:
flash("Wrong Credentials")
return render_template('auth/auth.html')
else:
flash("You are not registered!")
return render_template('auth/auth.html')
和我的tools.db是这样的,这个文件基本上是我希望与主应用程序保持独立并维护模块化应用程序的功能。这些功能按照他们的名义进行。
from app.blueprints.authentication.models import User
from app import db, b_crypt
def is_registered(email):
return User.query.filter_by(email=email).first() is not None
def is_authenticated(email, password):
return b_crypt.check_password_hash(User.query.filter_by(email=email).first().password, password)
def add_user_to_database(username, password, email, role, status):
try:
user = User(
name=username,
password=b_crypt.generate_password_hash(password),
email=email,
role=role,
status=False
)
db.session.add(user)
db.session.commit()
except Exception as manager_rugby:
print manager_rugby.message
db.session.rollback()
当我登录时,is_authenticated总是返回false!为什么?请帮助我真的不知道为什么它不起作用。它得到2个字符串并返回一个布尔值,但密码是正确的我不知道什么是错的
答案 0 :(得分:1)
你检查过密码的哈希值了吗?我认为您需要更改__init__
模型中的User
方法。从那里删除这一行:
self.password = b_crypt.generate_password_hash(password)
在保存模型之前设置哈希密码。我怀疑你把密码哈希两次。这就是每次都返回false的原因。