2012-01-06 14 views
2

ログインしているユーザーのゲスト/遅延登録アカウントから、新しいセッションが作成されたときに実行する新しいアカウントに物を渡すコードがたくさんあります。Devise:確認後にコードを実行

class SessionsController < Devise::SessionsController 

    def new 
    super 
    end 

    def create 
    super 
    logging_in # this is the method which will run 
    end 

    def destroy 
    super 
    end 

end 

ユーザがログインしたときに機能しますが、確認後にDeviseがユーザをログインすると、上記は実行されません。ユーザーがログインした後にそのメソッドを実行したい場合、どこにメソッドを置くべきですか?ログインするか確認するかによって異なります。

+1

このメソッドを再定義することができます:https://github.com/plataformatec/devise/blob/master/app/controllers/devise/confirmations_controller.rb#L19 –

答えて

6

ありがとうございました。ここで私はそれをやった。

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) 
     logging_in # Here it is 
     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 

    protected 

    def after_resending_confirmation_instructions_path_for(resource_name) 
     new_session_path(resource_name) 
    end 

    def after_confirmation_path_for(resource_name, resource) 
     after_sign_in_path_for(resource) 
    end 

end 

logging_in方法はcurrent_userを使用していますので、それはsign_in後に追加する必要があります。

+0

Deviseのコントローラを拡張している場合はちょうどメモ'super'を呼び出すために' new'と 'create'をオーバーライドする必要はありません。あなたはそれらを放つことができ、それは自動的に起こります。 – n0nick

関連する問題