30
29

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Deviseのconfirmable - 確認メールのリンクをクリックしたら即サインインする

Last updated at Posted at 2015-08-02

Screenshot 2015-08-02 15.53.07.png

#前提

Deviseで認証するRailsアプリでUserモデルにconfirmableモジュールが実装されている。

#やりたいこと

ユーザーが確認メールにあるリンクをクリックしたら即サインインできるようにしたい。

#やりかた

ConfirmationsController#showをオバーライドする。
サインインさせたいタイミングでsign_in(resource)を呼ぶ。

/app/controllers/confirmations_controller.rb
# Override
class ConfirmationsController < Devise::ConfirmationsController
  def show
    self.resource = resource_class.confirm_by_token(params[:confirmation_token])
    yield resource if block_given?

    if resource.errors.empty?
      set_flash_message(:notice, :confirmed) if is_flashing_format?

      sign_in(resource) # この一行を加えるのみ

      respond_with_navigational(resource){ redirect_to after_confirmation_path_for(resource_name, resource) }
    else
      respond_with_navigational(resource.errors, :status => :unprocessable_entity){ render :new }
    end
  end
end

deviseネームスペース外に存在するconfirmations_controller.rbについてDeviseに知らせるため、devise_forに登録する。

/config/routes.rb
Rails.application.routes.draw do
  # ...

  devise_for :users, controllers: { confirmations: 'confirmations' }

  # ...
end

#潜在的危険性

ユーザーが新規登録時に間違ったemailアドレスを記入した場合、たまたまそのemailを受け取った第三者にアカウントを乗っ取られてします可能性がある。

#参考文献

30
29
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
30
29

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?