devise使ってユーザー認証機能の追加と設定

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]

今度はログアウトできました。


こういうブログもありました。

人気のあるブログ:

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください