手順1
Gemfile
gem 'devise'
ターミナル
$ bundle
$ rails g devise:install
#これをすると以下のようになる
===============================================================================
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. You can copy Devise views (for customization) to your app by running:
rails g devise:views
===============================================================================
手順2
・ビューの作成
ターミナル
$ rails g devise:views
・Userモデルの作成
ターミナル
$ rails g devise User
# この時にmigrationファイルが作成されるのでusersテーブルに追加したいカラムを記述すると良い。
# 今回はnameカラムを追加するとする。
$ rails db:migrate
手順3
手順2で追加したnameカラムを使用できるように設定します。
app/controllers/application_controller.rb
application_controller.rb
class ApplicationController < ActionController::Base
#このコードがあると、Railsで生成されるすべてのフォームとAjaxリクエストにセキュリティトークンが自動的に含まれます。セキュリティトークンがマッチしない場合には例外がスローされます。(Railsガイド)
protect_from_forgery with: :exception
before_action :configure_permitted_parameters, if: :devise_controller?
protected
#configure_permitted_parametersはストロングパラメータを設定するメソッド。
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:name])
devise_parameter_sanitizer.permit(:account_update, keys: [:name])
end
end
基本的な操作は以上。
番外編
ユーザー編集をパスワード無しで行う。
registrations_controller.rb
class RegistrationsController < Devise::RegistrationsController
protected
def update_resource(resource,params)
resource.update_without_password(params)
end
end
上のコードを使うにはroutingを変更しないといけない。
routes.rb
Rails.application.routes.draw do
devise_for :users, controllers: { registrations: "registrations" }
end