Step by Step Ruby on Rails

Ruby on Railsで実際にWebサイトを構築する手順をまとめています。

Ruby on Rails Tutorial ユーザーログアウトの処理

「Ruby on Rails Tutorial」のサンプルアプリをAngularJSとBootstrap3を使う形にして作成します。今回はユーザーログアウトの処理を作成します。

1)Railsルート設定の確認

ログアウトに関わるルート設定は下記のようにしています。

$ rake routes
  :
match '/app/sessions', to: 'sessions#destroy', via: 'delete'

上記のように、Sessionsコントローラのdestroyアクションで定義するようにルート設定しています。

2)AngularJSのresourceサービスの定義内容確認

ログインを定義する際にresourceサービスを使って定義済みです。

myModule.factory("sessionResource", function($resource) {
  return $resource("/app/sessions", {},
    {
      'create':  { method: 'POST' },
      'destroy': { method: 'DELETE' },
      'current_user': { method: 'GET', isArray: false }
    }
  );
});

3)Railsコントローラを定義

$ vi app/controllers/sessions_controller.rb

  def destroy
    cookies.delete(:remember_token)
    head :no_content
  end

4)ナビゲーションメニューにsignout関数へのリンクを追加

$ vi app/views/layouts/_header.html.erb

<li><a href="" ng-click="signout()">Sign out</a></li>

5)AngularJSのコントローラにsignout関数を追加

ログアウトのリンクはナビゲーションメニューにあるのでナビゲーションメニューを制御しているコントローラにsignout関数を追加します。

flashService.setUserで現在ログイン中のユーザー名を保持しているので、これにnullを設定します。

ログアウト後は、ルートのページに遷移します。

$ vi app/assets/javascripts/mymodule.js.erb

function CollapseDemoCtrl($scope, flashService, sessionResource, $location) {
  $scope.signout = function() {
    sessionResource.destroy({}, function(response) {
      flashService.setUser(null);
      $location.path("/");
    });
  };
}