心はいつもAirPucci (空元気でもいいから)

毎日がPucciを着ているような気分

RailsTutorial4.0を高速で復習する。8.2.5章。

   


8.2.5ユーザー登録と同時にサインインする、です。

ユーザーが登録を行った後、そのユーザーが自動的にサインインするという当たり前の機能を実装します。

テストを書く

リスト8.26 新規ユーザー登録後にユーザーがサインインしたことをテストする。
spec/requests/user_pages_spec.rb

require 'spec_helper'

describe "User pages" do
略
    describe "with valid information" do
略
      describe "after saving the user" do
        before { click_button submit }
        let(:user) { User.find_by(email: 'user@example.com') }

        it { should have_link('Sign out') }
        it { should have_title(user.name) }
        it { should have_selector('div.alert.alert-success', text: 'Welcome') }
      end
    end
  end
end

これ後づけですね。もうviewはこのとおり実装してあるので、テストはパスするはず。と思ったらしなかった。

リスト8.27 ユーザー登録後にサインアップする。
app/controllers/users_controller.rb

class UsersController < ApplicationController
略
  def create
    @user = User.new(user_params)
    if @user.save
      sign_in @user
      flash[:success] = "Welcome to the Sample App!"
      redirect_to @user
    else
      render 'new'
    end
  end
略
end

ユーザーがログインしたという動作
sign_in @user
を加えました。RSpecって見てくれじゃなくてキチンとプログラム実行してテストしてるんですね。

8.2.6サインアウトする、です。

テストを書く

Sign outをクリックしたらSign inが表示されるというシンプルなテストです。

リスト8.28 ユーザーのサインアウトをテストする。
spec/requests/authentication_pages_spec.rb

require 'spec_helper'

describe "Authentication" do
略
  describe "signin" do
略
    describe "with valid information" do
略
      describe "followed by signout" do
        before { click_link "Sign out" }
        it { should have_link('Sign in') }
      end
    end
  end
end

テストは、destroyがないというエラーになります。まだ実装していません。

Signoutを実装する

リスト8.29 セッションを削除する (ユーザーのサインアウト)。
app/controllers/sessions_controller.rb

class SessionsController < ApplicationController
略
  def destroy
    sign_out
    redirect_to root_url
  end
end

まずは怒られたdestroyの実装から。
いきなりsign_outと書いているので、次はヘルパーとして実装します。

リスト8.30 Sessionsヘルパーモジュールのsign_outメソッド。
app/helpers/sessions_helper.rb

module SessionsHelper

  def sign_in(user)
    remember_token = User.new_remember_token
    cookies.permanent[:remember_token] = remember_token
    user.update_attribute(:remember_token, User.encrypt(remember_token))
    self.current_user = user
  end
略
  def sign_out
    self.current_user = nil
    cookies.delete(:remember_token)
  end
end

current_userを無しにして:remember_tokenを削除しています。

テストはパスしました。

ちょっとセキュリティが引き続ききになっていますがいったんコミットします。
次は
8.3Cucumberの紹介 (オプション)
です。

 - テクニカル ,

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

  関連記事

画面キャプチャ系extension

現在メインブラウザはchromeを利用しています。画面キャプチャextensio …

Mac miniのメモリを自力で16Gに増設しました

Mac miniとDellの27インチIPS液晶、とても快適です。もっと快適にす …

no image
RailsTutorial4.0を高速で復習する。5.2章。

5.2SassとAsset Pipeline、です。 ここは読み物系です。読んで …

メタプログラミングRuby第1章

初めてのRuby2章と8章をやったところで、メタプログラミングRubyに進みます …

no image
Gitをインストールする

Rails開発がしたいのですが、今後必要になるでしょうからGitをインストールし …

コンビニで切れないiPhone充電ケーブル買った

iPhone充電に使うライトニングケーブルって高いのに切れ易く涙目。 こんな感じ …

BD再生のオープンソース

メディアはシリコンすら持ちたくない主義なのですが、どうしてもBluelay Di …

no image
RailsのRoutingいろいろ

コントローラーがAbc アクションがactrionxだとして、 http://y …

no image
データベースのリファクタリング?

ruby on rails3プリケーションプログラミングの本の内容をruby2. …

RailsTutorial4.0を高速で復習する。8.1.2章。

8.1.2サインインをテストする、です。 Signin(ログイン)失敗の場合 ロ …