どうも!
インストラクターのババです!
Railsを使用していると「devise」というgemをよく見かけると思います。
ただよく聞く割に
deviseってよく聞くけど何?
deviseの使い方がわからない
deviseってどんな機能があるの?
と、疑問を持っておられる方も少なくありません。
そこで今回は
deviseとは
deviseの使い方
deviseに機能を追加する
という順番でdeviseについて解説していきたいと思います。
これを読めばdeviseにどういった機能があるのかしっかりイメージできます!
deviseとは
deviseとはrailsで作ったwebアプリケーションに簡単に認証機能を実装できるgemのことです。
認証機能と聞くと難しく感じますがようは、login,logout機能のことです。
deviseは認証機能を追加するためのgemの中で一番使用されており、コマンドを何度か打つだけで簡単に認証機能を実装することができます!
認証機能を自分で実装しようと思うとどうしても工数がかかったり、安全性の面で不安が出てきてしまいます。
deviseはそんな問題を一挙に解決してくれる優れもののgemです!
deviseの使い方
それでは実際にdeviseを使ってみましょう!
gem install
まずgemのインストールをしていきましょう!
GemFileに以下を記述していください。
source 'https://rubygems.org' gem 'devise'
そのあとbundle installを行ってください。
これでgemのインストールは完了です。
セットアップ
deviseのセットアップは三つのコマンドで完了します
rails g devise:install
はじめに打つコマンドはrails g devise:installです。
deviseの設定ファイルをrailsアプリケーションにインストールするためのコマンドです。
$ rails g devise:install 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:
<%= notice %>
<%= alert %>
4. You can copy Devise views (for customization) to your app by running: rails g devise:views ===============================================================================
出てくる文章について解説します。
1, Ensure you have defined default url options in your environments files.
デフォルトのURLを設定してくださいという意味です。デフォルトのURLは開発環境の場合localhost:3000になるので、例を元に記入していってください。
2, Ensure you have defined root_url to *something* in your config/routes.rb.
rootを設定してくださいという意味です。rootにしたいpathを例にならって設定しましょう。
3, Ensure you have flash messages in app/views/layouts/application.html.erb.
flashメッセージを表示するためのタグをapplication.html.erbに記入しましょう。
flashメッセージはそれぞれnotice, alertという変数に格納されます。
4, You can copy Devise views (for customization) to your app by running:
deviseのviewはデフォルトだと味気ないものになってしまいます。
viewをカスタマイズするためには rails g devise:views を打つ必要があります。
今回はカスタマイズを行わないので、何も打ち込まず進めていきます。
rails g devise User
次にdeviseで認証するためのモデルを作成していきます。
今回はUserモデルを作成するのでUserにしていますが、他のモデルを使用したい時はそのモデル名を打ち込むようにしてください。
$ rails g devise User Running via Spring preloader in process 75195 Expected string default value for '--jbuilder'; got true (boolean) invoke active_record create db/migrate/20170104102510_devise_create_users.rb create app/models/user.rb invoke test_unit create test/models/user_test.rb create test/fixtures/users.yml insert app/models/user.rb route devise_for :users
rake db:migrate
おなじみmigrationファイルを読み込むためのコマンドです。
$ rake db:migrate == 20170104102510 DeviseCreateUsers: migrating ================================ -- create_table(:users) -> 0.0232s -- add_index(:users, :email, {:unique=>true}) -> 0.0066s -- add_index(:users, :reset_password_token, {:unique=>true}) -> 0.0015s == 20170104102510 DeviseCreateUsers: migrated (0.0317s) =======================
これでセットアップは完了です!
サインアップ
http://localhost:3000/users/sign_up
サインイン
http://localhost:3000/users/sign_in
このように画面が表示されていれば導入完了です。
このようにとても簡単に導入を行うことができます!
deviseに機能を追加する
作成したばかりのUserファイルを見てみると、このようになっていることがわかります。
class User < ActiveRecord::Base # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable and :omniauthable devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable end
このdeviseの後に続くシンボルが現在Userに導入されている機能です。
現在導入されている機能の他にも合計で10個のモジュールが用意されています。
それぞれの機能について解説していきます。
Database Authenticatable
データベースに保存されたパスワードが正しいかどうかの検証とを行ってくれます。
また暗号化も同時に行うためセキュリティ面でも安心できます。
Omniauthable
twitter, facebookなど現代のwebサービスで必須なSNS認証を行うためのモジュールです。
SNS認証をする場合このほかにもgemを追加する必要が出てくるので注意が必要です。
Confirmable
登録後メールを送り、そのメールのURLをクリックすると本登録が完了するといったような仕組みを作ることが可能になります。
Recoverable
パスワードをリセットするためのモジュールです。
Registerable
基本的にUser登録、編集、削除機能を作成することができます。
Rememberable
20日間ログインしたままにすると言った、永続ログイン機能を作成することができます。
ログイン画面の下の方にチェックボックスがあって、それをチェックすると永続ログインが有効化するといったような仕組みを作ることができます。
Trackable
サインイン回数、サインイン時間など、ユーザーの分析に必要なデータを保存しておくことができます。
サービスが成長するにはユーザーの分析が不可欠なので、有用な機能ですね。
Timeoutable
一定期間活動していないアカウントのログインを破棄する機能です。
ログインしたままだとログイン情報がオンライン上に残ってしまい悪用されてしまう可能性もあります。
セキュリティ面での向上を期待できる機能です。
Validatable
emailのフォーマットやパスワードの長さなど、一般的なバリデーションを追加してくれるモジュールです。
Lockable
ログインに何度も失敗すると、アカウントをロックすることができる機能です。
こちらの機能もセキュリティ面で向上が期待できますね。
まとめ
今回はdeviseの簡単な使い方とそれぞれの追加機能について解説していきました。
deviseは簡単だからこそ、何をしているか理解しないと、思わぬエラーが出てしまうことがあります。
この記事を参考にdeviseのイメージをしっかりつかむようにしましょう。
参考記事