「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("/"); }); }; }