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