devise使ってユーザー認証機能の追加と設定
devise を使って認証機能をつけてみます
参考にさせていただいたページ
rails3とユーザー認証プラグイン- Devise-で、とりあえず「Sign up」「Sign in」「Sign out」ができるようにしてみる
環境
- Mac OS X 10.8.4
- Ruby 1.9.3p429
- Rails 3.2.13
プロジェクトの作成などの前準備
[sh]
$ rails new myproj
$ cd myproj
[/sh]
Gemfileに
[ruby]
gem ‘devise’
[/ruby]
を追加する。
インストールなど
以下をターミナルで実行します。
[sh]
$ bundle install –path vender/bundle
$ rails g devise:install
[/sh]
セットアップ方法が表示されるのでだいたいその通りに。
[sh]
$ rails g controller home index
$ rails g devise:views
$ rails g devise user
$ rake db:migrate
[/sh]
設定
config/routes.rbのdo~endの間に以下を追加
[ruby]
root :to => ‘home#index’
[/ruby]
デフォルトページの削除
[sh]
$ rm public/index.html
[/sh]
app/views/layouts/application.html.erbの適当な場所に以下を追加
[ruby]
<%= notice %>
<%= alert %>
[/ruby]
app/controllers/home_controller.rbの2行目に以下を追加
[ruby]
before_filter :authenticate_user!
[/ruby]
サーバ起動( $ rails s )して、ブラウザで
http://localhost:3000
へアクセスし認証ページが出る事を確認する。
一応ここまでで認証機能が動いていそう。
ユーザ登録などして試してみる。
次は、ログイン中には「Sign out」を表示してクリックしたらログアウト出来るように
app/views/layouts/application.html.erbへ以下を追加
[ruby]
<% if user_signed_in?%>
Signed in as <%= current_user.email %>. Not you? <%= link_to "Sign out", destroy_user_session_path %>
<% end %>
[/ruby]
表示されるようになった「Sign out」というリンクをクリックするとRouting Errorになりました。
No route matches [GET] "/users/sign_out"
[sh]
$ rake routes
[/sh]
で確認してみます。
(省略) destroy_user_session DELETE /users/sign_out(.:format) {:action=>"destroy", :controller=>"devise/sessions"} (省略)
どうやらGETではなく、DELETEというHTTPメソッドで渡さなければならないみたいです。
これには:method => :deleteを追加すれば良いみたいです。
app/views/layouts/application.html.erb を開いて、
[ruby]
<% if user_signed_in?%>
Signed in as <%= current_user.email %>. Not you? <%= link_to "Sign out", destroy_user_session_path, :method => :delete %>
<% end %>
[/ruby]
今度はログアウトできました。