Tag: Devise

目次

関連ページ

参考情報

概要

  • Railsに認証機能を組み込むためのモジュール

組み込み

Gemfileの編集

  • Gemfileに以下のgemを追加する。
    gem 'devise'
    gem 'omniauth-twitter'
    
  • bundle install実行
    bundle install --path vendor/bundle

Device関連ファイルの生成

  • device関連ファイルを生成する
    bundle exec rails g devise:install
  • 以下が表示される
    Running via Spring preloader in process 19921
          create  config/initializers/devise.rb
          create  config/locales/devise.en.yml
    ===============================================================================
    
    Some setup you must do manually if you haven't yet:
    
      1. Ensure you have defined default url options in your environments files. Here
         is an example of default_url_options appropriate for a development environment
         in config/environments/development.rb:
    
           config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
    
         In production, :host should be set to the actual host of your application.
    
      2. Ensure you have defined root_url to *something* in your config/routes.rb.
         For example:
    
           root to: "home#index"
    
      3. Ensure you have flash messages in app/views/layouts/application.html.erb.
         For example:
    
           <p class="notice"><%= notice %></p>
           <p class="alert"><%= alert %></p>
    
      4. If you are deploying on Heroku with Rails 3.2 only, you may want to set:
    
           config.assets.initialize_on_precompile = false
    
         On config/application.rb forcing your application to not access the DB
         or load models when precompiling your assets.
    
      5. You can copy Devise views (for customization) to your app by running:
    
           rails g devise:views
    
    ===============================================================================
    
  • 1.確認メール送信のための設定。とりあえずdevelopment.rbに以下を追加する(本番だと変更しないといけないらしい)
    config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
  • 2.ルートの設定。config/routes.rbを修正。root_urlを設定済みの場合は不要
     root to: "home#index"
  • 3.メッセージ表示の設定。application.html.erbを修正。設定済みの場合は不要
     <p class="notice"><%= notice %></p>
     <p class="alert"><%= alert %></p>
  • 4.Herokuの場合。
  • 5.Devise関連のビューを変更するためにファイルを生成する。そのまま実行する
    bundle exec rails g devise:views

最もシンプルな認証機能を生成する

  • Twitter経由やらFacebook経由やらを試すまえに最も基本的なパスワードによる認証を試しておくと流れがつかみやすい。
  • ./最もシンプルな認証機能

Twitter認証を利用してログイン

  • Twitterにログインしその情報をユーザーとして利用する。
  • ./Twitter認証

特定のユーザーだけがログインできるページの作成

方法1: コントローラーに細工する

  • Deviseでログインしたユーザーがcurrent_userに保存されている。これとパラメータのIDで指定されたユーザーを比較し、異なればどこか他にリダイレクトするというもの。ruby - Rails user profile page only accessible to correct user - Stack Overflow
    class UsersController < ApplicationController
    
        before_action :check_user
    
        private
    
        def check_user
          if current_user != @user
            redirect_to root_url, alert: "Sorry, This Profile belongs to someone else !"
          end
        end
    end
    

方法2: authenticated

トラブルシューティング

タイムアウト発生時に「true」と表示される

ステージング環境で認証できない(undefined methodが表示される)

  • development.rbやproduction.rbで以下のようにセットアップしている場合、staging.rbにも設定が必要。
    Devise.setup do |config|
      config.omniauth :twitter, TWITTER_CONSUMER_KEY, TWITTER_CONSUMER_SECRET
    end
    

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-07-06 (金) 14:25:49