=======
deviseのインストール
gem 'devise'
$ bundle install
$ rails g devise:install
config/environments/development.rb
config.action_mailer.default_url_options = { :host => 'localhost:3000' }
config/environments/production.rb
config.action_mailer.default_url_options = { :host => 'appname.herokuapp.com' }
confin/routes.rb
root :to => "top#index"
ここでは仮にtop#indexをルートパスに指定。
app/views/layouts/application.html.erb
<%= notice %>
<%= alert %>
メッセージを表示したければ↑
Herokuの場合、以下の設定が必要
config/application.rb
config.assets.initialize_on_precompile = false
deviseでUserモデルを作成
$ rails g devise User
とすると、user.rbモデルとマイグレーションファイルが生成されますが、まだmigrateは行わないで下さい。
app/models/user.rb
devise :database_authenticate, :registerable,
:recoverable, :rememberable, :trackable, :validatable, :confirmable # confirmableを追加
db/migrate/2013xxxxxxx_devise_create_users.rb
## Confirmable
t.string :confirmation_token
t.datetime :confirmed_at
t.datetime :confirmation_sent_at
t.string :unconfirmed_email # Only if using reconfirmable
viewの生成
$ rails g devise:views
app/views/layouts/application.html.erbの適切な場所に追記。
<% if user_signed_in? %>
<li><%= link_to "Logout", destroy_user_session_path, method: :delete %></li>
<% else %>
<li><%= link_to "Login", new_user_session_path %></li>
<% end %>
ログインの制限をかけたいControllerに記述.
before_filter :authenticate_user!
development環境で確認
$ rake db:migrate
$ rails s
サインアップすると、標準出力に
Confirm my account
とURL(localhost)が出力されているので、そのURLにアクセスして、登録したアカウントを有効化する。
Herokuで確認(メールを送信するまで確認)
導入方法は2つあります
- Sendgridのプラグインを導入する
- gmailのsmtp認証を使う
今回は1のSendgridで進めます。
以下のコマンドは、herokuのアカウントでSendGridのアドオンの利用登録(クレジットカードの登録)を済ませておかないと叩けません。無料枠でも利用するには登録が必要みたいです。
$ heroku addons:add sendgrid:starter
すると自動的にHerokuでSendGridのアカウントが取得されます。
アカウント名とパスを表示するには、
$ heroku config:get SENDGRID_USERNAME
$ heroku config:get SENDGRID_PASSWORD
を実行します。
SMTP認証が有効になるまで2時間ほどかかる場合もあるかもしれません。
ちなみに、こちらのユーザ名、パスワードでSendgridのWEBページにログインできます。
config/environment.rb
ActionMailer::Base.delivery_method = :smtp
ActionMailer::Base.smtp_settings = {
:user_name => "yourSendGridname you get from heroku",
:password => "yourSendGridname you get from heroku",
:domain => "heroku.com",
:address => "smtp.sendgrid.net",
:port => 587,
:authentication => :plain,
:enable_starttls_auto => true
}
config/initializers/devise.rb
config.mailer_sender = 'noreply@yourdomain'
最後にデプロイして正常にDeviseが導入できたか確認する
$ git push heroku master
$ heroku run rake db:create
$ heroku run rake db:migrate
おまけ
- 必ず.gitignoreに以下のフォルダを無視するように設定すること。
/public/assets/*
これでサインアップ時に、登録したメールアドレスにアカウントを有効にするURLが記載されたメールが届きます。
アクセスしてログインできれば設定完了です!