BottleのCookieの設定にはpathの設定が必要だった
やろうとしたこと
PythonのWEBフレームワーク Bottle
でログイン機能をつくろうとした
具体的にいえば、ログインでユーザー認証後に Cookie
に user_id
を設定する。
app.py
@route('/')
def index():
user_id = request.get_cookie('user_id', secret=SECRET_KEY)
current_user = session.query(User).get(user_id) if user_id else None
return template('templates/index',url=url, current_user=current_user)
@route('/users/login', method='GET')
def login_get():
current_user = None
user_id = request.get_cookie('user_id', secret=SECRET_KEY)
redirect('/') if user_id
return template('templates/users/login', url=url, current_user=current_user)
@route('/users/login', method='POST')
def login_post():
current_user = None
email = request.POST.getunicode('email')
password = request.POST.getunicode('password')
verified_user = # ユーザー認証の処理
# 認証が通ればオブジェクトが入る
if verified_user is not None:
response.set_cookie('user_id', verified_user.id, secret=SECRET_KEY)
redirect('/')
else:
return template('templates/users/login', url=url, current_user=current_user)
つまづいたこと
ログイン認証が通ったら、ルートパスにリダイレクトするんですが、ルートパスでログインしているときの表示に切り替わらない。
※ current_user
が None
か否かで判定しています。
原因
ログインの認証が通って、クッキーをセットしたときに path
の設定も必要だったみたい。今回ログイン認証をして Cookie
をセットしたときのパスは以下になります。
app.py
@route('/users/login', method='POST')
def login_post():
そうなると、 user_id
変数が /users
のパスにセットされるみたいで /
のパスだと変数がとりだせないみたいです。知らんかった。
以下みたいに path
を設定するとできるようになりました。
app.py
@route('/users/login', method='POST')
def login_post():
# 略
if verified_user is not None:
response.set_cookie('user_id', verified_user.id, secret=SECRET_KEY, path='/')
ちゃんとパスもをセットしないとだめなんですね。Django
だとその辺設定しなくてよいので見落としていました。
参考にさせていただきました
Author And Source
この問題について(BottleのCookieの設定にはpathの設定が必要だった), 我々は、より多くの情報をここで見つけました https://qiita.com/yoskmr/items/8d35b6c7a15cfa275dfc著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .