0
我正在构建一个python应用程序,我希望用户最初被注册为非活动状态,这样我就可以通过切换存储我的mongodb中的“活动”属性单独批准它们用户。我遇到的问题是,将活动更改为false似乎对用户登录的能力没有任何影响。烧瓶登录不会拒绝不活跃的用户
这里是我的用户名和注册路线:
@auth_flask_login.route("/login", methods=["GET", "POST"])
def login():
if request.method == "POST" and "email" in request.form:
email = request.form["email"]
userObj = User()
user = userObj.get_by_email_w_password(email)
if user and flask_bcrypt.check_password_hash(user.password,request.form["password"]) and user.is_active():
remember = request.form.get("remember", "no") == "yes"
if login_user(user, remember=remember):
print user.is_active
flash("Logged in!")
return redirect('/notes/create')
else:
error = "invalid user"
return render_template("/auth/login.html")
@auth_flask_login.route("/register", methods=["GET","POST"])
def register():
registerForm = forms.SignupForm(request.form)
current_app.logger.info(request.form)
if request.method == 'POST' and registerForm.validate() == False:
current_app.logger.info(registerForm.errors)
return "uhoh registration error"
elif request.method == 'POST' and registerForm.validate():
email = request.form['email']
# generate password hash
password_hash = flask_bcrypt.generate_password_hash(request.form['password'])
is_active = False
# prepare User
user = User(email,password_hash,is_active)
print user
try:
user.save()
flash("Please log in")
return redirect('/login') #redirect to the login page when
except:
flash("unable to register with that email address")
current_app.logger.error("Error on registration - possible duplicate emails")
# prepare registration form
templateData = {
'form' : registerForm
}
return render_template("/auth/register.html", **templateData)`enter code here`
我的用户模型:
class User(db.Document):
email = db.EmailField(unique=True)
password = db.StringField(default=True)
active = db.BooleanField(default=True)
isAdmin = db.BooleanField(default=False)
timestamp = db.DateTimeField(default=datetime.datetime.now())
def is_authenticated(self):
return True
def is_active(self):
return self.active
def is_anonymous(self):
return False
def get_id(self):
return unicode(self.id)
我感谢所有帮助。我一直坚持这几个小时。
编辑:@auth_flask_login是我正在使用的蓝图。
对不起,这其实从我使用的蓝图。 “ auth_flask_login =蓝图('auth_flask_login',__name__,template_folder ='模板') ”。在功能上@auth_flask_login应该为我的路由工作,我没有得到任何错误。 – Milazzo 2014-12-01 21:27:10
没关系,但对于所有需要验证的视图函数,您必须使用装饰器'@ login_required'但至少对于您发布的视图函数,我不认为用户已被记录因为它们本身就是登录和注册页面。所有其他需要用户认证的页面都应该有'@ login_required'装饰器 – adarsh 2014-12-01 21:45:56
因为'blueprint'即'auth_flask_login'没有进行认证。当然,如果你希望在视图函数中扩展认证的范围,你应该考虑使用来自flask登录的'current_user'来获取用户的实例。 – adarsh 2014-12-01 21:48:22