SlideShare une entreprise Scribd logo
1  sur  33
Télécharger pour lire hors ligne
認証
Authentication
自己紹介
●   名前:フカヤ ジュン
●   twitter: @fukajun
●   Rails, B Shell, C#, Androidが好き
●   Railsは、ポツポツ1年前くらいから
●   SenchaTouch、jQueryMobile勉強中
●   仕事:PHP、PostgreSQL
●   音楽:Ben Foldsが大好き
●   服:jhon bull private laboが好き
●   入門で作ってみた:http://sankiseiki.jp/
認証ってなに?




ある事が正しいということを確認すること
例えば?
●   情報を見たり、変更したりできるかどうか?

●   貯金を引き出すことができるか?

●   金庫の扉を開けることができるか?

●   Webメールを利用することができるか?
どうやって確認する?
●   情報を見たり、変更したりできるかどうか?
     →パスワード
●   貯金を引き出すことができるか?
     →カードと暗証番号
●   金庫の扉を開けることができるか?
     →暗証番号
●   Webメールを利用することができるか?
     →メールアドレスとパスワード
つまり
●   それをできる人しか知りえない情報を知っている、
    持っているか?


    保険証
    カード
    暗証番号
    パスワード
WEBサイトで代表的ものは?


    やっぱりログイン

         ↓

      パスワード

  ID(E-Mail)とパスワード
パスワードのみの場合
●   パスワード(URLなど)のみ
    ●   ○ 簡単にログインできる
    ●   ○ ユーザーの登録とかなくてめんどくさくない
    ●   × だれが使ってたのかわからないよね
    ●   × パスワードが漏れると大変&めんどくさい

        例) パスワード(キー)が含まれているURL
    ●   https://docs.google.com/document/d/1Wjtw5UwPDsLZIn0D
        eUhwWpLMbO3x1CecV3k76pQeENs/edit?
        hl=ja&authkey=CM7dhqcO
IDとパスワードの場合
●   ○ 誰が 使っているのか識別できる。
●   ○ パスワードが、漏れてもその人だけ変更すれば
    よい。
●   ○ ユーザー毎に好きなパスワードを設定すること
    ができる。
●   × ユーザーの登録とかめんど クサイ ヨネ(82)
パスワードデータの持ち方
●   登録する時(サインアップ)               ●   照合する時(ログイン)
    ●   暗号化して保存                     ●   入力したパスワード
         hogehoge                        hogehoge
         ↓                               ↓
         $2a$10$6p19TYH.GZLZP            $2a$10$6p19TYH.GZLZP
         teUya6hfePo6BFgTBPTA            teUya6hfePo6BFgTBPTA
         DXZzT8aIjrNoEtGR4h3y            DXZzT8aIjrNoEtGR4h3y
                                照合

         DBにはいっているパスワードは暗号化され
         ているのでパスワードが漏れても大丈夫
         →元のパスワードは、わからない。
Rails3でログイン!




  Deviseプラグインで
ログイン機能を追加してみよう
devsie とは?
●   Railsで作ったアプリケーションに簡単に認証機能
    を追加できるプラグイン。
     
●   また他のプラグインとTwitterやFacebookなどと連
    携するためのOAuth認証、OpenID認証などの機
    能を追加で組み込むことができる。
    →Omniauthプラグイン
deviseを使って機能を追加



 ログイン・ログアウト機能を追加


  ユーザー登録機能を追加
minamirbistをダウンロード
minamirbistを題材に行うのでgit clone
 $ git clone https://github.com/Minamirb/minamirbist.git


4月6日時点まで戻す(hogeは適当なブランチ名にしてね)
 $ cd minamirbist
 $ git checkout -b hoge 5f777c3
インストール(1)
●   Gemfilesを編集
     gem 'devise', '1.1.5'


●   お決まりのコマンド(Gemsをインストール)
     $ bundle install
インストール(2)
●   Deviseの機能をインストール
     $ rails generate devise:install

●   ログイン後の遷移先(たぶんもう設定済)
    config/routes.rbに下記を追加
     root :to => "welcome#index"
インストール(3)
●   ログイン成功、ログイン失敗などのメッセージなどを
    表示される。
●   app/views/layouts/application.html.erb
      <p class="notice"><%= notice %></p>
      <p class="alert"><%= alert %></p>
ユーザーModelを作成
●   Userモデルを作成(ログインするユーザーの情報)
        $ rails generate devise user

    ●   config/routes.rb
          →devise_for :user の記述が追加される。
    ●   db/migrate/20110422184000_devise_create_u
        sers.rb
    ●   app/model/user.rb
user.rbについて
●   :dateabase_authenticatable
      ID、PasswordなどをDBに登録して管理
●   :registerable
      アカウントを登録、変更できるようにする。
●   :recoverable
      パスワードを忘れた場合にメールで送ってくれる。
●   :rememberable
      次回以降自動でログイン機能を追加
●   :trackable
      ログイン履歴を記録する
●   :validatable
      ユーザー登録の再に、メールアドレス、パスワードのチェックを行うか?
インストール(5)
●   DBにUsersテーブルを作成!
     $ rake db:migrate
 
●   確認してみよう
     $ rake routes



●   試しにログイン画面を表示してみる
     localhost:3000/users/sign_in
     →ログイン画面が表示される!
ログイン、ログアウトのリンクを設定
●   もう一度確認
     $ rake routes


●   ログインへのパス
     new_user_session_path

●   ログアウトへのパス
     destroy_user_session_path
ログイン、ログアウトのリンクを設定
              
●   現在ログイン中のユーザー次のメソッドで取得できるの
    で(ログインしてないと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 %>
アクセス制限する


JK「ていうーか、memberも、eventも勝手に追加され
たくなしぃー」

              ↓

    controllerにフィルターを追加して
  一部のactionは、ログイン済のとき表示する
フィルターとは?
●   コントローラーの各アクションを実行する「前」、「後」、そして「前後」に行う
    処理を指定するしくみ

●   before_filter :メソッド名
    ●   アクションの実行前に呼び出すメソッドを指定する。
    ●   アクションを実行しないこともできる。
                                                   他のアクション
                                                   へリダイレクト
●   after_filter :メソッド名            before_filter
    ●   アクション実行後に呼び出すメソッドを指定する。
    ●   クライアントに返すレスポンスデータを加工できる。     action A      action B
●   arround_filter : acitionの前後
●   skip_...: 指定したフィルタ処理を行わない
                                    after_filter
●   prepend_...:優先度の高いフィルタを定義
アクセス設定
●   event_controller, members_controllerでログイ
    ン前にアクセスできるactionを制限してみる。

●   app/controller/members_controller.rb
      before_filter :authenticate_user!

        →ログイン済かどうかを判断、ログインしてなかったら、ログイ
        ン画面に、飛びます。
        →new_user_sessions_pathへリダイレクトされます。
 


JK「メンバーリストまで表示できなく
   なってしまったわ!、CDM」

         ↓

フィルタを通さないactionを指定する。
 
●   一部のみフィルター処理の対象外にする。
     :except => [:index, :show]



●   逆に、一部のみフィルターをかけることもできる。
    例えば
     :only => [:new, :create, :edit, :update......]
●   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]
ログイン後のリダイレクト先を設定
●   deviseは、ログイン後次のようにリダイレクト
    する。
    ●   user_rootが設定されている→user_root
    ●   user_rootが設定されてない→root


●   config/routes.rb
        get :members, :to => "members#index", :as => "user_root"
ひとまずこれで終了
残作業




new member, new eventへのリンクもログイン後の
●

       み表示できるようにしてみよう!
残作業

●   管理者ユーザーログインを作るつもりだったけど、
    サインアップ機能が残ったままになってしまった。
    ●   config/routes.rbを変更すればアクセスできなくできる
        devise_for :user, :skip => :registrations

    ●   ↑じゃー管理者用のユーザー用のデータはどうやってい
        れるの?

Contenu connexe

Tendances

MT meets PHP - PHP conference Kansai 2013
MT meets PHP - PHP conference Kansai 2013MT meets PHP - PHP conference Kansai 2013
MT meets PHP - PHP conference Kansai 2013
純生 野田
 
WordPressで提供するWeb API
WordPressで提供するWeb APIWordPressで提供するWeb API
WordPressで提供するWeb API
Yuko Toriyama
 

Tendances (14)

MT meets PHP - PHP conference Kansai 2013
MT meets PHP - PHP conference Kansai 2013MT meets PHP - PHP conference Kansai 2013
MT meets PHP - PHP conference Kansai 2013
 
WordPressで提供するWeb API
WordPressで提供するWeb APIWordPressで提供するWeb API
WordPressで提供するWeb API
 
Web 04
Web 04Web 04
Web 04
 
やはりお前らのMTMLは間違っている!
やはりお前らのMTMLは間違っている!やはりお前らのMTMLは間違っている!
やはりお前らのMTMLは間違っている!
 
jQuery Mobileの基礎
jQuery Mobileの基礎jQuery Mobileの基礎
jQuery Mobileの基礎
 
MTで学ぶセキュアプログラミング@MT Tokyo
MTで学ぶセキュアプログラミング@MT TokyoMTで学ぶセキュアプログラミング@MT Tokyo
MTで学ぶセキュアプログラミング@MT Tokyo
 
仕事で使うちょっとしたコードをOSSとして開発メンテしていく - Django Redshift Backend の開発 - PyCon JP 2016
仕事で使うちょっとしたコードをOSSとして開発メンテしていく- Django Redshift Backend の開発 - PyCon JP 2016仕事で使うちょっとしたコードをOSSとして開発メンテしていく- Django Redshift Backend の開発 - PyCon JP 2016
仕事で使うちょっとしたコードをOSSとして開発メンテしていく - Django Redshift Backend の開発 - PyCon JP 2016
 
Pjax1
Pjax1Pjax1
Pjax1
 
⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2
 
ScaLa+Liftとか
ScaLa+LiftとかScaLa+Liftとか
ScaLa+Liftとか
 
Okinawapm#3
Okinawapm#3Okinawapm#3
Okinawapm#3
 
jQuery勉強会#4
jQuery勉強会#4jQuery勉強会#4
jQuery勉強会#4
 
マスタリングJUNOS ユーザアカウント
マスタリングJUNOS ユーザアカウントマスタリングJUNOS ユーザアカウント
マスタリングJUNOS ユーザアカウント
 
behatで始めるBDD
behatで始めるBDDbehatで始めるBDD
behatで始めるBDD
 

En vedette

Central Planning Versus Markets Marxism: The Cuban Communist Party Confronts ...
Central Planning Versus Markets Marxism: The Cuban Communist Party Confronts ...Central Planning Versus Markets Marxism: The Cuban Communist Party Confronts ...
Central Planning Versus Markets Marxism: The Cuban Communist Party Confronts ...
Larry Catá Backer
 
Notafilia moedas comunitárias de portugal
Notafilia   moedas comunitárias de portugalNotafilia   moedas comunitárias de portugal
Notafilia moedas comunitárias de portugal
Miguel Yasuyuki Hirota
 
文山工業區開發-黃國書
文山工業區開發-黃國書文山工業區開發-黃國書
文山工業區開發-黃國書
peopo
 
依納五穗種子-公民記者分享-中部聚會
依納五穗種子-公民記者分享-中部聚會 依納五穗種子-公民記者分享-中部聚會
依納五穗種子-公民記者分享-中部聚會
peopo
 
台灣電視新聞台競爭環境-課後討論
台灣電視新聞台競爭環境-課後討論台灣電視新聞台競爭環境-課後討論
台灣電視新聞台競爭環境-課後討論
s986413
 

En vedette (20)

Central Planning Versus Markets Marxism: The Cuban Communist Party Confronts ...
Central Planning Versus Markets Marxism: The Cuban Communist Party Confronts ...Central Planning Versus Markets Marxism: The Cuban Communist Party Confronts ...
Central Planning Versus Markets Marxism: The Cuban Communist Party Confronts ...
 
市民政党ポデモスを生んだ スペインの社会的・政治的背景
市民政党ポデモスを生んだスペインの社会的・政治的背景市民政党ポデモスを生んだスペインの社会的・政治的背景
市民政党ポデモスを生んだ スペインの社会的・政治的背景
 
Dinero positivo, 14 de julio de 2016
Dinero positivo, 14 de julio de 2016Dinero positivo, 14 de julio de 2016
Dinero positivo, 14 de julio de 2016
 
標題製作
標題製作標題製作
標題製作
 
Notafilia moedas comunitárias de portugal
Notafilia   moedas comunitárias de portugalNotafilia   moedas comunitárias de portugal
Notafilia moedas comunitárias de portugal
 
China, Law and the Foreigner: Mutual Engagements on a Global Stage
China, Law and the Foreigner: Mutual Engagements on a Global StageChina, Law and the Foreigner: Mutual Engagements on a Global Stage
China, Law and the Foreigner: Mutual Engagements on a Global Stage
 
台灣電視新聞台競爭環境-課前簡報
台灣電視新聞台競爭環境-課前簡報台灣電視新聞台競爭環境-課前簡報
台灣電視新聞台競爭環境-課前簡報
 
市民の生活を支える国づくりの 基礎としての基本的人権: 世界人権宣言と日本国憲法から考える
市民の生活を支える国づくりの基礎としての基本的人権:世界人権宣言と日本国憲法から考える市民の生活を支える国づくりの基礎としての基本的人権:世界人権宣言と日本国憲法から考える
市民の生活を支える国づくりの 基礎としての基本的人権: 世界人権宣言と日本国憲法から考える
 
公民新聞的切入與深入(余佳璋)
公民新聞的切入與深入(余佳璋)公民新聞的切入與深入(余佳璋)
公民新聞的切入與深入(余佳璋)
 
文山工業區開發-黃國書
文山工業區開發-黃國書文山工業區開發-黃國書
文山工業區開發-黃國書
 
resume-1
resume-1resume-1
resume-1
 
La ONU
La ONULa ONU
La ONU
 
南海大餐pdf
南海大餐pdf南海大餐pdf
南海大餐pdf
 
「通貨と持続可能性: 見失われた関連性」要約
「通貨と持続可能性: 見失われた関連性」要約「通貨と持続可能性: 見失われた関連性」要約
「通貨と持続可能性: 見失われた関連性」要約
 
依納五穗種子-公民記者分享-中部聚會
依納五穗種子-公民記者分享-中部聚會 依納五穗種子-公民記者分享-中部聚會
依納五穗種子-公民記者分享-中部聚會
 
Muslimaage killaa ... حصن المسلم (Dhua Book .. Dhivehi Bahun)
Muslimaage killaa ... حصن المسلم  (Dhua Book .. Dhivehi Bahun)Muslimaage killaa ... حصن المسلم  (Dhua Book .. Dhivehi Bahun)
Muslimaage killaa ... حصن المسلم (Dhua Book .. Dhivehi Bahun)
 
Governance Polycentrism--Hierarchy and Order Without Government in Business a...
Governance Polycentrism--Hierarchy and Order Without Government in Business a...Governance Polycentrism--Hierarchy and Order Without Government in Business a...
Governance Polycentrism--Hierarchy and Order Without Government in Business a...
 
Ebbf dtruran imsd csr in sme - part 3 of 3
Ebbf dtruran   imsd csr in sme - part 3 of 3Ebbf dtruran   imsd csr in sme - part 3 of 3
Ebbf dtruran imsd csr in sme - part 3 of 3
 
市民プラットフォーム型政治を 日本で実現するために何ができるか
市民プラットフォーム型政治を日本で実現するために何ができるか市民プラットフォーム型政治を日本で実現するために何ができるか
市民プラットフォーム型政治を 日本で実現するために何ができるか
 
台灣電視新聞台競爭環境-課後討論
台灣電視新聞台競爭環境-課後討論台灣電視新聞台競爭環境-課後討論
台灣電視新聞台競爭環境-課後討論
 

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

Ruby on Rails Tutorial Chapter8-10
Ruby on Rails Tutorial Chapter8-10Ruby on Rails Tutorial Chapter8-10
Ruby on Rails Tutorial Chapter8-10
Sea Mountain
 
データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回
Naoyuki Yamada
 
Rails and twitter #twtr_hack
Rails and twitter #twtr_hackRails and twitter #twtr_hack
Rails and twitter #twtr_hack
i7a
 
スマートフォン向けサービスにおけるサーバサイド設計入門
スマートフォン向けサービスにおけるサーバサイド設計入門スマートフォン向けサービスにおけるサーバサイド設計入門
スマートフォン向けサービスにおけるサーバサイド設計入門
Hisashi HATAKEYAMA
 
Twitter連携chrome extension作り方
Twitter連携chrome extension作り方Twitter連携chrome extension作り方
Twitter連携chrome extension作り方
Hiroshi Oyamada
 
アプリコンテスト
アプリコンテストアプリコンテスト
アプリコンテスト
Tomonori Yamada
 
WTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniterWTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniter
Masanori Oobayashi
 
20091030cakephphandson 01
20091030cakephphandson 0120091030cakephphandson 01
20091030cakephphandson 01
Yusuke Ando
 

Similaire à deviseを利用した認証について@Minamirb (20)

DjangoでさくっとWeb アプリケーション開発をする話
DjangoでさくっとWeb アプリケーション開発をする話DjangoでさくっとWeb アプリケーション開発をする話
DjangoでさくっとWeb アプリケーション開発をする話
 
Ruby on Rails Tutorial Chapter8-10
Ruby on Rails Tutorial Chapter8-10Ruby on Rails Tutorial Chapter8-10
Ruby on Rails Tutorial Chapter8-10
 
データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回
 
Rails and twitter #twtr_hack
Rails and twitter #twtr_hackRails and twitter #twtr_hack
Rails and twitter #twtr_hack
 
Windows storeアプリ brekky
Windows storeアプリ brekkyWindows storeアプリ brekky
Windows storeアプリ brekky
 
Inside mobage platform
Inside mobage platformInside mobage platform
Inside mobage platform
 
スマートフォン向けサービスにおけるサーバサイド設計入門
スマートフォン向けサービスにおけるサーバサイド設計入門スマートフォン向けサービスにおけるサーバサイド設計入門
スマートフォン向けサービスにおけるサーバサイド設計入門
 
Webteko 20090925
Webteko 20090925Webteko 20090925
Webteko 20090925
 
hktstudy 201206 「私だってやれば出来る子!♥Multi-Mechanize♥」
hktstudy 201206 「私だってやれば出来る子!♥Multi-Mechanize♥」hktstudy 201206 「私だってやれば出来る子!♥Multi-Mechanize♥」
hktstudy 201206 「私だってやれば出来る子!♥Multi-Mechanize♥」
 
Twitter連携chrome extension作り方
Twitter連携chrome extension作り方Twitter連携chrome extension作り方
Twitter連携chrome extension作り方
 
認証機能で学ぶ Laravel 5 アプリケーション
認証機能で学ぶ Laravel 5 アプリケーション認証機能で学ぶ Laravel 5 アプリケーション
認証機能で学ぶ Laravel 5 アプリケーション
 
Azure Static Web Apps を試してみた!
Azure Static Web Apps を試してみた!Azure Static Web Apps を試してみた!
Azure Static Web Apps を試してみた!
 
20120118 titanium
20120118 titanium20120118 titanium
20120118 titanium
 
アプリコンテスト
アプリコンテストアプリコンテスト
アプリコンテスト
 
Djangoによるスマホアプリバックエンドの実装
Djangoによるスマホアプリバックエンドの実装Djangoによるスマホアプリバックエンドの実装
Djangoによるスマホアプリバックエンドの実装
 
WTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniterWTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniter
 
20150221 めとべや東京-プライベートコード共有サービス
20150221 めとべや東京-プライベートコード共有サービス20150221 めとべや東京-プライベートコード共有サービス
20150221 めとべや東京-プライベートコード共有サービス
 
Redmineを使ってみよう
Redmineを使ってみようRedmineを使ってみよう
Redmineを使ってみよう
 
EC-CUBEプラグイン講義
EC-CUBEプラグイン講義EC-CUBEプラグイン講義
EC-CUBEプラグイン講義
 
20091030cakephphandson 01
20091030cakephphandson 0120091030cakephphandson 01
20091030cakephphandson 01
 

Dernier

Dernier (10)

知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 

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. つまり ● それをできる人しか知りえない情報を知っている、 持っているか? 保険証 カード 暗証番号 パスワード
  • 7. WEBサイトで代表的ものは? やっぱりログイン ↓ パスワード ID(E-Mail)とパスワード
  • 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プラグイン
  • 14. minamirbistをダウンロード minamirbistを題材に行うのでgit clone $ git clone https://github.com/Minamirb/minamirbist.git 4月6日時点まで戻す(hogeは適当なブランチ名にしてね) $ cd minamirbist $ git checkout -b hoge 5f777c3
  • 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 ユーザー登録の再に、メールアドレス、パスワードのチェックを行うか?
  • 20. インストール(5) ● DBにUsersテーブルを作成! $ rake db:migrate
  • 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 %>
  • 24. アクセス制限する JK「ていうーか、memberも、eventも勝手に追加され たくなしぃー」 ↓ controllerにフィルターを追加して 一部のactionは、ログイン済のとき表示する
  • 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へリダイレクトされます。
  • 27.   JK「メンバーリストまで表示できなく なってしまったわ!、CDM」 ↓ フィルタを通さないactionを指定する。
  • 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"
  • 32. 残作業 new member, new eventへのリンクもログイン後の ● み表示できるようにしてみよう!
  • 33. 残作業 ● 管理者ユーザーログインを作るつもりだったけど、 サインアップ機能が残ったままになってしまった。 ● config/routes.rbを変更すればアクセスできなくできる devise_for :user, :skip => :registrations ● ↑じゃー管理者用のユーザー用のデータはどうやってい れるの?