我一直在寻找类似的解决方案。我正在使用 bottle-cork.py 进行用户身份验证,并且需要一种方法来为用户提供“让我保持登录”选项
from bottle, import request, response # etc...
def post_get(name, default=''):
return bottle.request.POST.get(name, default).strip()
def login():
"""Authenticate users"""
username = post_get('username').lower()
password = post_get('password')
keep_login = post_get('keep_login')
session = request.environ['beaker.session']
if keep_login == 'true':
session.cookie_expires = False
response.set_cookie('keep_login', "true")
else:
session.cookie_expires = True
response.set_cookie('keep_login', "false")
aaa.login(username, password)
但是,每次向服务器发送请求时,bottle 都会返回一个新的会话 cookie,该 cookie 默认会在浏览器关闭时过期。为了解决这个问题,我添加了一个每次发送请求时都会调用的函数:
def preserve_cookie(request):
keep_login = request.get_cookie('keep_login')
session = request.environ['beaker.session']
if keep_login == 'true':
session.cookie_expires = False
return request
因此,例如:
@bottle.get('/get_username')
def check_login(user=None):
try:
aaa.require(username=user)
except:
raise bottle.HTTPError(401)
preserve_cookie(request)
return aaa.current_user.username
这样,返回的新 cookie 将保持用户保存登录会话的偏好。但是,当前实现的方式 beaker.SessionMiddleware 只是将 cookie 设置为 2038 年 1 月 18 日到期。