Rails の…
cookies に signed
というのがあるらしいので,確認してみた
Railsでは、機密データの保存用に「署名付きcookie(signed cookie)」と「暗号化cookie(encrypted cookie)」を提供しています。
setup
$ devcontainer up --workspace-folder .
$ devcontainer exec --workspace-folder . rails s -b 0.0.0.0
teardown
$ docker compose -f .devcontainer/compose.yaml stop
空のコントローラー作る
$ edit app/controllers/home_controller.rb
$ cat app/controllers/home_controller.rb
class HomeController < ApplicationController
def index
render plain: 'hello'
end
end
$ edit config/routes.rb
>> get '/' => 'home#index'
リクエスト localhost:3000
をすると,開発者ツールのネットワークを確認しても cookie 関連のデータが無いことがわかる.
cookies を設定してみる
$ edit app/controllers/home_controller.rb
$ cat app/controllers/home_controller.rb
class HomeController < ApplicationController
def index
+ cookies[:something] = 'someone'
render plain: 'hello'
end
end
リクエスト localhost:3000
をすると,レスポンスに Set-Cookie
ヘッダに値が入っていることがわかる
Set-Cookie: something=someone; ...
cookies.encrypted を設定してみる
$ edit app/controllers/home_controller.rb
$ cat app/controllers/home_controller.rb
class HomeController < ApplicationController
def index
+ cookies.encrypted[:John] = 'Doe'
- cookies[:something] = 'someone'
render plain: 'hello'
end
end
リクエスト localhost:3000
をすると,リクエストに Cookie
ヘッダ,レスポンスの Set-Cookie
ヘッダに値が入っていることがわかる
Set-Cookie: John=uhB...--npG...--R9N...; ...
cookies.encrypted を読んでみる
$ edit app/controllers/home_controller.rb
$ cat app/controllers/home_controller.rb
class HomeController < ApplicationController
def index
+ puts cookies.encrypted[:John]
- cookies.encrypted[:John] = 'Doe'
render plain: 'hello'
end
end
リクエスト localhost:3000
をすると,値が取り出せていることがわかる.
(rails s したコンソールで確認する
Refs