IT技術にまつわる実験ノート

「長編を書くより、短編を数多く完成させてください。それが上達への近道です」 by 手塚治虫

セッションについて学んでみる

参考:

【Rails入門】sessionの使い方まとめ | 侍エンジニア塾ブログ | プログラミング入門者向け学習情報サイト

 

写経してみる

$ rails new session_sample

$ cd session_sample

$ code .

 

Gemfile を編集して、bcrypt を有効化する。その後、$ bundle して gem をインストール:

f:id:matt-note:20181011032135p:plain

 

User モデルを作成する:

$ rails generate model User name:string password_digest:string

password_digestというカラムには暗号化されバスワードが入ります。
この名前にすると暗号化されて保存されるようになります。

 

なお、password_digest というカラム名が必要である理由は、ActiveModel::SecurePassowrd 内で定義されている has_secure_password メソッドを読めば良い。

# This mechanism requires you to have a +XXX_digest+ attribute.
# Where +XXX+ is the attribute name of your desired password.

参考:rails/secure_password.rb at master · rails/rails · GitHub

 

マイグレーションを実行する:

$ rails db:migrate

 

models/user.rb で has_secure_password メソッドを呼び出す:

f:id:matt-note:20181011034954p:plain

has_secure_password メソッドが使われた時にだけ、bcrypt gem をロードするようになっているとのこと。

# Load bcrypt gem only when has_secure_password is used.

参考:rails/secure_password.rb at master · rails/rails · GitHub

 

コンソールからユーザーを作成:

f:id:matt-note:20181011035837p:plain

 

データを確認してみる。$ rails dbconsole を実行:

f:id:matt-note:20181011040151p:plain

 

ログイン画面を作成する:

写経する。

f:id:matt-note:20181011045458p:plain

 

# Sessions allow you to store objects in between requests.

# You can place objects in the session by using the session method, which accesses a hash:
# session[:person] = Person.authenticate(user_name, password)
#
# You can retrieve it again through the same hash:
# "Hello #{session[:person]}"

# Sessions are stored by default in a browser cookie that's cryptographically signed, but unencrypted.

参考:rails/base.rb at master · rails/rails · GitHub

 

 

 

その他の参考:

Railsにおけるパスワードの扱い方(BCrypt)