第8章の復習メモです。
個人的に重要と思ったことを書きます。
前回と同様、以下3つの視点で書きます。
- 分かったこと
- 分からなかったこと
- 今回はスルーしたこと
分かったこと
セッションについて
今回は、ログイン、ログアウトの機能を実装した。
- ユーザがログインし、ログアウトするまでの間、接続情報(ユーザID等)を保持する必要がある。
- 接続情報は、ブラウザとサーバ間にセッションを確立することで保持される。
- 情報が保持される場所は、ブラウザ上(HTTPプロトコルは状態を保持できないため、この方法を使う)。
- 保持する形式は、cookiesを用いる。これは、小さなテキストデータ形式である。
- 本章では、一時cookieを使う。この場合、ブラウザを閉じたら接続が破棄される。永続クッキーは9章で扱う。
- 一時cookiesに保存された情報は、sessionメソッドを用いて、Railsアプリケーションから参照できる(今回は、ログイン中のユーザIDを保存した)。
ルーティングの確認
rails routes
コマンドで、ルーティングの一覧が表示される。
$ rails routes
Prefix Verb URI Pattern Controller#Action
root GET / static_pages#home
help GET /help(.:format) static_pages#help
about GET /about(.:format) static_pages#about
contact GET /contact(.:format) static_pages#contact
signup GET /signup(.:format) users#new
login GET /login(.:format) sessions#new
POST /login(.:format) sessions#create
logout DELETE /logout(.:format) sessions#destroy
users GET /users(.:format) users#index
POST /users(.:format) users#create
new_user GET /users/new(.:format) users#new
edit_user GET /users/:id/edit(.:format) users#edit
user GET /users/:id(.:format) users#show
PATCH /users/:id(.:format) users#update
PUT /users/:id(.:format) users#update
DELETE /users/:id(.:format) users#destroy
flash.now
7章で学習したflash変数は、次のリクエストが終了するまでの間、表示される変数である。
しかし、今回はrenderメソッドを用いたので、flashが必要以上に残ってしまった(renderはリクエストが発生しない)。
この場合、flash.nowを使うと解決する。flash.nowは、現在のリクエストが終了するまでの間、表示される。
flash.now[:danger] = 'Invalid email/password combination' # ← ここで使用
render 'new'
以下を参考にさせていただきました。
https://qiita.com/shi-ma-da/items/ea433c337d2a691ff1bc
https://kossy-web-engineer.hatenablog.com/entry/2018/10/05/063957
sessionメソッドの使い方
session情報の追加
app/helpers/sessions_helper.rb
module SessionsHelper
# 渡されたユーザーでログインする
def log_in(user)
session[:user_id] = user.id # ← session情報にユーザIDを追加
end
end
session情報の削除
deleteメソッドを使う。
session.delete(:user_id)
分からなかったこと、今回はスルーしたこと
- テスト全般
- アプリケーションの仕様の詳細