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