2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

BottleのCookieの設定にはpathの設定が必要だった

Last updated at Posted at 2018-09-19

やろうとしたこと

PythonのWEBフレームワーク Bottle でログイン機能をつくろうとした
具体的にいえば、ログインでユーザー認証後に Cookieuser_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_userNone か否かで判定しています。

原因

ログインの認証が通って、クッキーをセットしたときに 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 だとその辺設定しなくてよいので見落としていました。

参考にさせていただきました

Pythonで一番小さいWEBフレームワークbottle.py その6(COOKIES)

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?