前提・実現したいこと
railsチュートリアルを学習中のものです。
8章の 8.2 ログイン機能実装のところで疑問が浮かびました。リンク内容
冒頭では 'この節では、cookiesを使った一時セッションでユーザーをログインできるようにします。このcookiesは、ブラウザを閉じると自動的に有効期限が切れるものを使います。' と記述されていますが、そのまま作り続けて8.2.3 リンク内容の最後に 'また、ブラウザを完全に閉じてしまうと、期待どおりアプリケーションのログイン情報が消去され、再びログインを要求されるようになったことも確認してみてください。'と書かれているのでログインした状態でブラウザを閉じて再度ページを開くとログインした状態のままでした。
これが正常なのかどうかが知りたいです。
sessions_helper.rb
module SessionsHelper # 渡されたユーザーでログインする def log_in(user) session[:user_id] = user.id end # 現在ログイン中のユーザーを返す (いる場合) def current_user if session[:user_id] @current_user ||= User.find_by(id: session[:user_id]) end end # ユーザーがログインしていればtrue、その他ならfalseを返す def logged_in? !current_user.nil? end end
_header.html.erb
<header class="navbar navbar-fixed-top navbar-inverse"> <div class="container"> <%= link_to "sample app", root_path, id: "logo" %> <nav> <ul class="nav navbar-nav navbar-right"> <li><%= link_to "Home", root_path %></li> <li><%= link_to "Help", help_path %></li> <% if logged_in? %> <li><%= link_to "Users", '#' %></li> <li class="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown"> Account <b class="caret"></b> </a> <ul class="dropdown-menu"> <li><%= link_to "Profile", current_user %></li> <li><%= link_to "Settings", '#' %></li> <li class="divider"></li> <li> <%= link_to "Log out", logout_path, method: :delete %> </li> </ul> </li> <% else %> <li><%= link_to "Log in", login_path %></li> <% end %> </ul> </nav> </div> </header>
sessions_controller.rb
class SessionsController < ApplicationController def new end def create user = User.find_by(email: params[:session][:email].downcase) if user && user.authenticate(params[:session][:password]) log_in user redirect_to user else flash.now[:danger] = 'Invalid email/password combination' render 'new' end end def destroy session[:user_id] = nil redirect_to(root_path) end end
試したこと
rails serverを一度終了させて、再起動してみましたが結果は変わりませんでした。
補足情報(FW/ツールのバージョンなど)
AWS Cloud9
Google chrome
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。