私は同様の解決策を探していました。ユーザー認証に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日に期限切れになるように設定するだけです。