我使用permanent_session_lifetime
在一段时间不活动后使用户的会话失效。问题是,这个请求是通过ajax进行的,所以我无法在ajax上下文中重定向烧瓶的正常行为。
http://xxxx/login?next=%2Fusers%2Fajax_step1
如果烧瓶会话到期,我希望重定向到logout
中的before_request
路线,而不是这个。我怎么能这样做?
@mod.before_request
def make_session_permanent():
session.modified = True
session.permanent = True
app.permanent_session_lifetime = timedelta(minutes=10)
@mod.route('/logout')
@login_required
def logout():
logout_user()
session.clear()
flash(gettext(u'You have been logged out.'))
return redirect(url_for('auth.login'))
答案 0 :(得分:1)
如果您想使用before_request
方法,请检查会话在那里的有效性,并根据需要返回重定向:
@mod.before_request
def make_session_permanent():
if session_is_invalid(session):
return redirect(url_for('logout'))
def session_is_invalid(ses):
# return your qualifier
否则,swehren的评论是一个好主意 - 而不是依赖于后台重定向 next 调用,在前端重定向中根据返回的有效性调用Ajax。 Ajax电话:
$.ajax({
type: "POST",
url: "{{ url_for('login') }}",
success: function(data) {
// redirect if the data contained a qualifier for an expired session
}
});