43

Deviseで確認後のリダイレクトを作成するにはどうすればよいですか?

confirmation moduleカスタムを追加する前はafter_sign_up_path、初めて正常に機能していましたlogin/signupが、メールの確認リンクをクリックすると、ログイン後のパス (ユーザー プロファイル) に設定したパスにリダイレクトされます。

私の目標は、追加情報を収集するためのフォーム ウィザードと「開始」ページを作成することです。明らかな注意点は、このリダイレクトが確認時に一度だけ発生することです。

Stack Overflow に投稿されている他の解決策をいくつか試しましたが、いずれも機能していないようです。

4

6 に答える 6

138

これを達成するためのあまり邪魔にならない方法は、 のafter_confirmation_path_forメソッドを単にオーバーライドすることですDevise::ConfirmationsController

新しいディレクトリconfirmations_controller.rbを作成します。app/controllers

class ConfirmationsController < Devise::ConfirmationsController

  private

  def after_confirmation_path_for(resource_name, resource)
    your_new_after_confirmation_path
  end

end

で、このconfig/routes.rb行を追加して、Devise がカスタム を使用するようにしますConfirmationsController。これは、Devise がusersテーブル上で動作することを前提としています (自分のものに合わせて編集できます)。

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

Web サーバーを再起動すると、Web サーバーが表示されます。

于 2013-02-27T15:12:51.120 に答える
19

Devise wikiを確認しましたか?after_signup_path_forそれはあなたの場合に定義するパスであり、これを行う方法を説明します。

ウィキから:

新しいコントローラー「registrations_controller.rb」を作成し、適切なメソッドをカスタマイズします。

class RegistrationsController < Devise::RegistrationsController
  protected

  def after_sign_up_path_for(resource)
    '/an/example/path'
  end
end

次に、それを使用するルートを追加します。

新しいコントローラーを使用するようにconfig/routes.rbを変更します

devise_for :users, :controllers => { :registrations => "registrations" }
于 2012-06-07T07:56:58.090 に答える
19

基本的には、Devise の25 行目あたりを変更しますConfirmationsController

これは、アクション内のそのステートメントshowの「ハッピー パス」を心ゆくまで変更するアクションをオーバーライドする必要があることを意味します。ifshow

class ConfirmationsController < Devise::ConfirmationsController
  def new
    super
  end

  def create
    super
  end

  def show
    self.resource = resource_class.confirm_by_token(params[:confirmation_token])

    if resource.errors.empty?
      set_flash_message(:notice, :confirmed) if is_navigational_format?
      sign_in(resource_name, resource)
      respond_with_navigational(resource){ redirect_to confirmation_getting_started_path }
    else
      respond_with_navigational(resource.errors, :status => :unprocessable_entity){ render_with_scope :new }
    end
  end
end

そして、そのためのスコープ付きルート (ビューとアクションを登録コントローラーに入れましたが、それを何にでも変更できます):

devise_for :users, controllers: { confirmations: 'confirmations' }
devise_scope :user do
  get '/confirmation-getting-started' => 'registrations#getting_started', as: 'confirmation_getting_started'
end

デフォルトのshowアクションは保護されたafter_confirmation_path_forメソッドを参照しているため、別のオプションとして、そのメソッドが返すものを変更することもできます。

于 2012-07-02T18:40:32.387 に答える
2

私はこれをすべて行ったところ、他の回答はどれも機能しませんでした (2015-04-09 with devise 3.4.1)。

サインアップ後、確認メールに関するメッセージが表示されたログイン ページにユーザーをリダイレクトしたいと考えていました。それを機能させるには、次のことを行う必要がありました。

class RegistrationsController < Devise::RegistrationsController

protected
  # This is the method that is needed to control the after_sign_up_path 
  # when using confirmable. 
  def after_inactive_sign_up_path_for(resource)
    new_user_session_path
  end

end

このコメントを見つけたところ、もっと早く必要な場所に正確に送られました。

Niels について言及している after_inactive_sign_up_path_for への参照は次のとおりです

于 2015-04-09T06:42:29.523 に答える
-3

Railsアプリに統合されたrefinerycmsconfirmation_pathを操作しながら、 も構成する必要があります

于 2013-05-19T17:43:11.023 に答える