Deviseの導入
準備
下記の環境で実行しています
Ruby 2.3.4
Rails 5.0.1
- cloud9のアカウントの作成、ログイン
- cloud9上に新しいRubyワークスペースを作成する
- ワークスペースを開く
上記の画面が出て来れば準備はOKです
RubyとRailsのバージョンを合わせておく
Gemfileの書き換え
- Gemfileを開いて、5行目付近を下記のように書き換え
gem 'rails', '5.0.1' # gem 'rails', '4.2.5'
- ターミナルでコマンドを実行
$ bundle update
$ bundle install
エラーが発生しなければOKです
Deviseを使ってユーザー認証機能を作成する
Deviseはrubyのgemで、ログインなどの認証が必要なアプリを作るために利用されます。
CSSがデフォルトのままだと見にくいので、今回はbootstrapを使ってレイアウトを整えることにします。bootstrapの設定が不要な場合は、bootstrapに関係する箇所は適宜飛ばして構いません。
1. Gemfileの書き換え
下記をGemfileの3~6行目に追記して保存します
gem 'devise' # 追記
gem 'devise-bootstrap-views' # 追記
gem 'devise-i18n' # 追記
gem 'devise-i18n-views' # 追記
gem 'bootstrap-sass', '~> 3.3.6' # 追記
2. ターミナルで下記のコマンドを順番に実行
$ mv app/assets/stylesheets/application.css app/assets/stylesheets/application.scss
$ bundle install
$ rails generate devise:install
$ rails generate devise User
$ rails db:migrate
3. app/controllers/application_controller.rbのファイル書き換え
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
before_action :authenticate_user!
before_action :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up) do |user_params|
user_params.permit(:name, :email, :password, :password_confirmation)
end
devise_parameter_sanitizer.permit(:account_update) do |user_params|
user_params.permit(:name, :email, :password, :password_confirmation, :current_password)
end
end
end
4. app/assets/stylesheets/application.scssの書き換え
@import "bootstrap-sprockets";
@import 'bootstrap';
@import 'devise_bootstrap_views'
5. app/assets/javascripts/application.jsの書き換え
//= require jquery
//= require jquery_ujs
//= require turbolinks
//= require bootstrap-sprockets
以上でdeviseの導入準備が整いました。
ユーザー登録・編集画面を作成する
1. ターミナルで下記のコマンドを順番に実行
$ rails g devise:views:bootstrap_templates
$ rails g scaffold Book title:string author:string
$ rails db:migrate
2. routes.rbを下記のように書き換え
Rails.application.routes.draw do
resources :books
devise_for :users
root 'books#index'
end
3. サーバー起動
$ rails s -p $PORT -b $IP