心はいつも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

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

  関連記事

SublimeText2をMacにインストールしてターミナルから起動できるようにする。

Windowsには秀丸っていう超優秀なテクストエディタがあって、無料でも使えるの …

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

10.3.4マイクロポストを削除する、です。 仕様 マイクロポスト個別に削除でき …

詳解 Objective-C 2.0 第3版 CHAPTER3 継承とクラス

[]多用といいメッセージキーワードといい、やっぱObjective-Cってキモチ …

iPadのiBooksで自炊とかしたPDFの電子書籍を読む

手順覚えないのでブログに書きます。 Bookscan使用して手持ちPDF電子書籍 …

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

11.2フォローしているユーザー用のWebインターフェイス、です。 モデルができ …

no image
RailsTutorial4.0を高速で復習する。5.6章。演習1問目。

5.6演習です。 一問目。 リスト5.28の静的ページのテストコードは簡潔ですが …

もうあかん!Mac OSXのスクロールを逆にする

OSXのいつのバージョンからだっけ? スクロールの向きが突如逆になったんですよね …

no image
ブログのデザイン開発、着手から完成まで今日1日でやります

久々のブログです。 昨日アクセス解析も1年ぶりに見たのですが、何がなくとも一定の …

no image
formatはどこから取ってくる?

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

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

8.2.1[このアカウント設定を保存する]、です。 RailsTutorial4 …