Successfully reported this slideshow.

deviseを利用した認証について@Minamirb

7,209 views

Published on

minami.rbにて発表した認証についての資料

Published in: Technology
  • Be the first to comment

deviseを利用した認証について@Minamirb

  1. 1. 認証Authentication
  2. 2. 自己紹介● 名前:フカヤ ジュン● twitter: @fukajun● Rails, B Shell, C#, Androidが好き● Railsは、ポツポツ1年前くらいから● SenchaTouch、jQueryMobile勉強中● 仕事:PHP、PostgreSQL● 音楽:Ben Foldsが大好き● 服:jhon bull private laboが好き● 入門で作ってみた:http://sankiseiki.jp/
  3. 3. 認証ってなに?ある事が正しいということを確認すること
  4. 4. 例えば?● 情報を見たり、変更したりできるかどうか?● 貯金を引き出すことができるか?● 金庫の扉を開けることができるか?● Webメールを利用することができるか?
  5. 5. どうやって確認する?● 情報を見たり、変更したりできるかどうか? →パスワード● 貯金を引き出すことができるか? →カードと暗証番号● 金庫の扉を開けることができるか? →暗証番号● Webメールを利用することができるか? →メールアドレスとパスワード
  6. 6. つまり● それをできる人しか知りえない情報を知っている、 持っているか? 保険証 カード 暗証番号 パスワード
  7. 7. WEBサイトで代表的ものは? やっぱりログイン ↓ パスワード ID(E-Mail)とパスワード
  8. 8. パスワードのみの場合● パスワード(URLなど)のみ ● ○ 簡単にログインできる ● ○ ユーザーの登録とかなくてめんどくさくない ● × だれが使ってたのかわからないよね ● × パスワードが漏れると大変&めんどくさい 例) パスワード(キー)が含まれているURL ● https://docs.google.com/document/d/1Wjtw5UwPDsLZIn0D eUhwWpLMbO3x1CecV3k76pQeENs/edit? hl=ja&authkey=CM7dhqcO
  9. 9. IDとパスワードの場合● ○ 誰が 使っているのか識別できる。● ○ パスワードが、漏れてもその人だけ変更すれば よい。● ○ ユーザー毎に好きなパスワードを設定すること ができる。● × ユーザーの登録とかめんど クサイ ヨネ(82)
  10. 10. パスワードデータの持ち方● 登録する時(サインアップ) ● 照合する時(ログイン) ● 暗号化して保存 ● 入力したパスワード hogehoge hogehoge ↓ ↓ $2a$10$6p19TYH.GZLZP $2a$10$6p19TYH.GZLZP teUya6hfePo6BFgTBPTA teUya6hfePo6BFgTBPTA DXZzT8aIjrNoEtGR4h3y DXZzT8aIjrNoEtGR4h3y 照合 DBにはいっているパスワードは暗号化され ているのでパスワードが漏れても大丈夫 →元のパスワードは、わからない。
  11. 11. Rails3でログイン! Deviseプラグインでログイン機能を追加してみよう
  12. 12. devsie とは?● Railsで作ったアプリケーションに簡単に認証機能 を追加できるプラグイン。  ● また他のプラグインとTwitterやFacebookなどと連 携するためのOAuth認証、OpenID認証などの機 能を追加で組み込むことができる。 →Omniauthプラグイン
  13. 13. deviseを使って機能を追加 ログイン・ログアウト機能を追加 ユーザー登録機能を追加
  14. 14. minamirbistをダウンロードminamirbistを題材に行うのでgit clone $ git clone https://github.com/Minamirb/minamirbist.git4月6日時点まで戻す(hogeは適当なブランチ名にしてね) $ cd minamirbist $ git checkout -b hoge 5f777c3
  15. 15. インストール(1)● Gemfilesを編集 gem devise, 1.1.5● お決まりのコマンド(Gemsをインストール) $ bundle install
  16. 16. インストール(2)● Deviseの機能をインストール $ rails generate devise:install● ログイン後の遷移先(たぶんもう設定済) config/routes.rbに下記を追加 root :to => "welcome#index"
  17. 17. インストール(3)● ログイン成功、ログイン失敗などのメッセージなどを 表示される。● app/views/layouts/application.html.erb <p class="notice"><%= notice %></p> <p class="alert"><%= alert %></p>
  18. 18. ユーザーModelを作成● Userモデルを作成(ログインするユーザーの情報) $ rails generate devise user ● config/routes.rb →devise_for :user の記述が追加される。 ● db/migrate/20110422184000_devise_create_u sers.rb ● app/model/user.rb
  19. 19. user.rbについて● :dateabase_authenticatable ID、PasswordなどをDBに登録して管理● :registerable アカウントを登録、変更できるようにする。● :recoverable パスワードを忘れた場合にメールで送ってくれる。● :rememberable 次回以降自動でログイン機能を追加● :trackable ログイン履歴を記録する● :validatable ユーザー登録の再に、メールアドレス、パスワードのチェックを行うか?
  20. 20. インストール(5)● DBにUsersテーブルを作成! $ rake db:migrate
  21. 21.  ● 確認してみよう $ rake routes● 試しにログイン画面を表示してみる localhost:3000/users/sign_in →ログイン画面が表示される!
  22. 22. ログイン、ログアウトのリンクを設定● もう一度確認 $ rake routes● ログインへのパス new_user_session_path● ログアウトへのパス destroy_user_session_path
  23. 23. ログイン、ログアウトのリンクを設定  ● 現在ログイン中のユーザー次のメソッドで取得できるの で(ログインしてないとnil) current_user● app/views/layouts/application.html.erb <% unless current_user %> <li><%= link_to "log_in", new_user_session_path, :class => :itemsub %></li> <% else %> <li><%= link_to "log_out", destroy_user_session_path, :class=> :itemsub %></li> <% end %>
  24. 24. アクセス制限するJK「ていうーか、memberも、eventも勝手に追加されたくなしぃー」 ↓ controllerにフィルターを追加して 一部のactionは、ログイン済のとき表示する
  25. 25. フィルターとは?● コントローラーの各アクションを実行する「前」、「後」、そして「前後」に行う 処理を指定するしくみ● before_filter :メソッド名 ● アクションの実行前に呼び出すメソッドを指定する。 ● アクションを実行しないこともできる。 他のアクション へリダイレクト● after_filter :メソッド名 before_filter ● アクション実行後に呼び出すメソッドを指定する。 ● クライアントに返すレスポンスデータを加工できる。 action A action B● arround_filter : acitionの前後● skip_...: 指定したフィルタ処理を行わない after_filter● prepend_...:優先度の高いフィルタを定義
  26. 26. アクセス設定● event_controller, members_controllerでログイ ン前にアクセスできるactionを制限してみる。● app/controller/members_controller.rb before_filter :authenticate_user! →ログイン済かどうかを判断、ログインしてなかったら、ログイ ン画面に、飛びます。 →new_user_sessions_pathへリダイレクトされます。
  27. 27.  JK「メンバーリストまで表示できなく なってしまったわ!、CDM」 ↓フィルタを通さないactionを指定する。
  28. 28.  ● 一部のみフィルター処理の対象外にする。 :except => [:index, :show]● 逆に、一部のみフィルターをかけることもできる。 例えば :only => [:new, :create, :edit, :update......]
  29. 29. ● app/controller/members_controller.rb class MembersController < ApplicationController before_filter :authenticate_user!, :except => [:index, :show]● app/controller/members_controller.rb ● class EventsController < ApplicationController ● before_filter :authenticate_user!, :except => [:index, :show]
  30. 30. ログイン後のリダイレクト先を設定● deviseは、ログイン後次のようにリダイレクト する。 ● user_rootが設定されている→user_root ● user_rootが設定されてない→root● config/routes.rb get :members, :to => "members#index", :as => "user_root"
  31. 31. ひとまずこれで終了
  32. 32. 残作業new member, new eventへのリンクもログイン後の● み表示できるようにしてみよう!
  33. 33. 残作業● 管理者ユーザーログインを作るつもりだったけど、 サインアップ機能が残ったままになってしまった。 ● config/routes.rbを変更すればアクセスできなくできる devise_for :user, :skip => :registrations ● ↑じゃー管理者用のユーザー用のデータはどうやってい れるの?

×