【Rails入門】sessionの使い方まとめ

こんにちは! フリーエンジニアの長瀬です。

みなさんはセッションを使っていますか?

セッションはログイン機能を実装するには必須のもので、ログインに成功した後にログイン状態を維持するために使用されます。

この記事では、セッションの使い方について

・ セッションとは

でセッションの役割について解説した後

・セッションを使ってみよう

で実際にRails5でセッションの使い方をわかりやすいサンプルコードとともに学んでいきましょう。

セッションとは

セッションは主にログイン機能に使用されるもので、ログイン状態を持続させるためにあります。

セッションのおかげで、一度ログインした後は登録されたユーザーとしての扱いを受けることができます。

逆に、セッションという仕組みがなければページを移動するたびにログインし直さなければならないことになるので、とても不便です。

ログイン機能の実装には必要なのでRailsでは、あらかじめセッションを実装するために便利なメソッドが用意されていて、簡単に実装することができます。

また、セッションの情報はRails標準では、ブラウザ側のクッキーに保存されるということも覚えておいてください。

セッションを使ってみよう

それでは、実際にセッションの仕組みを使って簡単なログイン機能を実装してみましょう。

実行環境はrails5.1.4で進めていきます。

今回はセッションに焦点を当てて説明しますので、ユーザーを登録する画面は作成しません。
あらかじめご了承ださい。

まずは、ユーザーを登録するためのユーザーモデルを作成します。
ユーザーモデルには、名前とパスワードが登録できるようにします。

始めに、パスワードを暗号化するためのgemを追加します。

Gemfileに以下の行をコメントアウトしてください。

bcryptというgemを使えば、データベースにパスワードを保存する際に、暗号化してくれます。

コメントアウトが完了したら、コマンドプロンプトで

と入力して、gemのインストールを完了してください。

それでは次にgenerateコマンドを使って、Userモデルを作成します。

コマンドプロンプトに以下のコマンドを入力してくたざい。

実行結果

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

migrationファイルが作成されたので、以下のコマンドを入力してデータベースに反映してください。

実行結果

これでユーザーモデルの作成は完了です。

次に、作成したapp/models/user.rbにパスワードの暗号化を有効にするための設定を加えます。

[app/models/user.rb]

次に、実際にユーザーを登録します。

この登録されたユーザー情報を使って、ログインを実装するためです。

rails cでコンソールを開いた後に、以下のコードを入力してください。

実行結果

コンソールには表形式で表示されるようにHirbというgemを使用しています。
まだ、設定したことのない方はこちらの記事を参考にしてください。

【Rails入門】初心者が知っておくべき3つのgem
更新日 : 2017年10月19日

それでは、ユーザーも登録できたので、ログイン画面を作成していきましょう。

generateコマンドを使って、一気に必要なファイルを作成します。

コマンドプロントに以下のコードを入力してください。

実行結果

では、必要なファイルは揃ったので、まずはコントローラーからコードを入力していきましょう。

app/controllers/sessions_controller.rbを開いて、以下のようにコードを修正してください。

何が書いてあるかよくわからないので、コードの解説をします。

まず、

の部分で、ログインボタンを押した後に、セッションに情報が保存されるかを判断しています。

params[:name]で、ユーザーがポストした値を取り出し、その後find_by_nameメソッドで、入力したnameとカラムに保存されたnameが一致した場合にユーザーに代入にしています。

今回はレコードは登録した1つしかないので、コンソール出力されたものが代入されます。

次に、

では&&を使って、条件を2つ指定しています。
userで、userの中身があるのかどうかを判断し、user.authenticateでは今回userに代入されたレコードのパスワードがユーザーがポストした値と一致しているのか判断しています。

もしも、パスワードが一致していなかったら、falseを返します。

そして、パスワードが登録されたユーザー情報と一致したら

で、セッションにユーザー名を登録しています。

session[:名前] はRailsにあらさじめ組み込まれているメソッドで、名前をつけて、セッションに登録できます。

たったこれだけのメソッドで、簡単にセッションの設定ができます。

また、else以降

でセッションを破棄しています。

そしてここまで説明すれば、前半の

の部分のコードを説明できます。

この部分では

で、ログインされているかを判断して、ログインされていたらインスタンス変数noticeを定義しています。

それでは、次にログイン画面を作成していきましょう。

先ほど作成されたapp/views/sessions/index.html.erbを開いて以下のように修正してください。

form_withメソッドで、入力フォームを作成しています。

また、sessions_index_pathでポスト先を指定してるので、ポスト用のルーティングを指定してあげる必要があります。

なのでconfig/routes.rbを開いて,以下のようにルーティングを修正してください。

これで、コントローラーとビューの設定が完了しました。

では、実際にログインして、セッションがうまく機能している確認しましょう。

コマンドプロンプトにrails sと入力して、サーバーを起動してください。

そして、ルーティングに従って、

http://localhost:3000/sessions/index

(補足http://localhost:3000の箇所は各自の開発環境により読み替えてください。)

にアクセスしてください。

Screen Shot 2560-09-19 at 21.16.40

ここにさきほど登録したnameとpasswordを入力してください。
(nameはsamuraiで、passwordはtestです)

Screen Shot 2560-09-19 at 21.17.31

ログインボタンを押すとコントローラーのところで説明したコードに従って、セッション情報が登録されます。

ログインが成功していたら、ページを更新すると

Screen Shot 2560-09-19 at 21.21.34

このように、@noticeに定義した値が出力されます。
@noticeにはセッション情報が使用されているので、セッションが成功していることを確認できました。

まとめ

いかがでしたでしょうか?

この記事では、セッションの使い方を解説しました。

ログイン機能を実装するにはセッションの扱い方を知っておく必要があります。

またRails標準ではブラウザ側のクッキーにセッションの情報は保存されますが、保存先を変更することもできるので興味があるかたは調べてみてください。

もしセッションの使い方について忘れてしまったらこの記事を確認してくださいね!

おすすめのコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

「何の言語から勉強すればいいかわからない・・・」そんなあなたに質問に答えていくだけで、何の言語を学べば良いのか診断いたします!未経験から6ヶ月でプログラミング習得に向けた学習プランが1分で分かる!

最短でプログラミングを習得したい方へ

元々ITリテラシーのある方やプログラムの学び方がわかっている方は独学で習得することも可能でしょう。

ただし、実際の学習期間中はつまづいている時間がほとんどです。

「もう挫折したくない」
「本業と両立しながら、好きな時間で自分のペースで勉強を続けていきたい。」
「自分だけのカリキュラムで効率的に勉強したい」

そんな方はお気軽に侍エンジニア塾までご相談ください。

弊社では、

  • プログラミング基礎学習
  • オリジナルアプリ開発
  • 仕事獲得

までをひと通り学習できます。

まずは無料体験レッスンで、弊社のコンサルタントと一緒にあなた専用の学習方法やカリキュラムを考えてみませんか?

挫折しない学び方や、通常1000時間以上かかる学習時間を1/3にする方法などより具体的なアドバイスもさせていただいています。

詳しくは下の画像をクリックして弊社サービス内容をご確認ください。

cta1

非常識な結果を出す卒業生多数!

エンジニアキャリア戦略

人気記事セレクション

3000名以上来場の人気セミナーが開催決定

18歳で時給6000円だった侍エンジニア塾代表の木内より、『プログラミングで人生を変える』ための学習方法をお教えます。

0からプログラミングを習得し、フリーランスエンジニアになる方法プログラミング学習の効率を劇的に上げる学習メソッドを解説しますので、奮ってご参加ください。

  • 日付:4/20(土),4/27(土)
  • 時間:14:00〜17:35終了予定
  • 場所:当社 道玄坂オフィス
  • 住所:〒150-0043 東京都渋谷区道玄坂2丁目11-1 Gスクエア渋谷道玄坂 4F *Googleマップでは「東京都渋谷区道玄坂2丁目11-1」で検索してください。近隣にスクエア渋谷という別のビルがあるためご留意ください。
  • 参加費:無料
  • URL:https://seminar.sejuku.net/
詳しくは下の画像をクリックして弊社セミナー内容をご確認ください。

LINEで送る
Pocket

この記事が気に入ったら
いいね!をしてフォローしよう

最新情報をお届けします

書いた人

長瀬来

長瀬来

Unityを使ったiOSアプリのリリース、フリマサイト運営の経験があります。

経験した言語はC、C#、Javascript、R、Python、Ruby、PHPなど

言語が好きで、英語や中国、ドイツ語を勉強しました。
将来的には海外で生活したいです。

現在はRuby on Rails5やCocos2dxの勉強を主にしています。

ライターとしては
できるだけ初心者にわかりやすい文章になるように心がけています。

趣味は語学、読書です。