2011-01-24 14 views
10

私はその場所を見渡して、多くの情報を見つけました...しかし、私にとっては何もうまくいかず、私はそれを得ません。Signupが正常に完了した後、リダイレクトできるようにDeviseの登録コントローラを無効にする

私はこのように、あなたが登録コントローラを無効にすると仮定されていることを知っている:トニーAmoyal http://www.tonyamoyal.com/2010/07/28/rails-authentication-with-devise-and-cancan-customizing-devise-controllers/で示した例以下、私はアクセスに新しいコントローラを更新するために、私のルートを変更することになっています次に

class Users::RegistrationsController < Devise::RegistrationsController 

def after_sign_up_path_for(resource) 
    authors_waiting_path 
end 

end 

devise_for :users, :controllers => { :registrations => "users/registrations" } do 
#get '/author/sign_up', :to => 'devise/registrations#new' 
#get '/client/sign_up', :to => 'devise/registrations#new' 
get '/author/sign_up', :to => 'users/registrations#new' 
get '/client/sign_up', :to => 'users/registrations#new'  
end 

はい、いくつかの特定のパスをキャッチして登録ページに送信していますので、これはちょっと変わっています。これにより、2つの登録シナリオを効果的に作成できます。 登録コントローラーをオーバーライドする前に私が持っていたものをコメントしました。

でも、すべてこれで、私のauthors_waiting_pathが有効なパスであること、それだけで登録した後、サインインページに行くを続けている:(

これは本当にイライラさせられる。

アレックス

編集:https://github.com/plataformatec/devise/wiki/How-To:-Redirect-after-registration-(sign-up)

しかし、私は???

セッションコントローラをオーバーライドする必要があります私は、このメソッドを作成、定義する見当がつかない:私も、工夫のwikiにこれを見つけました?

編集2:私は本当にそれは完全に無視だという気持ちを持って....私のログに「ここにいた」決して

class Pouets::RegistrationsController < Devise::RegistrationsController 

    def after_sign_up_path_for(resource) 
     authors_waiting_path 
    end 

    def new 
     super 
    end 

    def create 
     puts "was here" 
     super 
    end 

    def edit 
     super 
    end 

    def update 
     super 
    end 

    def destroy 
     super 
    end 

    def cancel 
     super 
    end 

    end 

と私:

私は、コントローラのダミーオーバーライドを入れていませんオーバーライドは...私は間違って何か:(

+0

使用しているレールのバージョンは?どのようなバージョンのデバイスですか? –

+0

Rails 3.0.3 and devise 1.1.5、私が正しい場合は、両方ともの最終バージョンです。 – Alex

答えて

9

[OK]をやっている必要があります...私はあなたがそれを上書きすることができるいずれかの必要があるのです:0

フォルダアプリ/コントローラ/ユーザーを作成します

registrations_controller.rbを次のように入力します:(セッションのオプションですが、sign_inを試してからリダイレクトします。さらに、これは工夫のwikiからであり、それは

class Users::RegistrationsController < Devise::RegistrationsController 

    def create 
    session["#{resource_name}_return_to"] = complete_path 
    super 
    end 

end 

再始動アプリケーションを動作する場合、私はあなたの場合はすべてのすべてで、あなたが作成しオーバーライドしなければなりません


(確保だけのためにあなたは何を信用していない)ことを確認していません唯一のユーザーをリダイレクトする...あなたは

sign_in_and_redirectあなたはモンキーパッチすべきいくつかのより複雑なシナリオを定義したい場合ので、あなたのコントローラーの意志が

のように見えるしたいです10

2番目のオプションは、monkeypatch helperに....

module Devise 
    module Controllers 
    # Those helpers are convenience methods added to ApplicationController. 
    module Helpers 
     def sign_in_and_redirect(resource_or_scope, resource=nil, skip=false) 
     #intended behaviour for signups 
     end 
    end 
    end 
end 
+0

申し訳ありませんが、私は何をしたいのか混乱させていると思います。私はすでにサインイン中のプロセスを処理していますが、確認メールを有効にしている間に待機中のページにユーザーを誘導したいだけです。はい、あなたは正しいですsign_inのパスをオーバーライドする方法は、主なアプリケーションコントローラではありますが残念なことに、後のサインアップの方法ではありません:)ところで、私はそれが場所のいたるところにそれらのメソッドを持っていることが理にかなってはならないと思うです – Alex

+0

編集:私はコードを追加 –

+0

ハァッ私の悪い、あなたはかなりあなたのコードは、このコントローラを正しく狙っていると確信していますか?多分新しいテストに "Test"を追加して、それが正しく描画されるかどうかを確認してください –

3

は、私は上記の解決策を試してみました、それは動作しますが、コードを工夫読んで、私はあなたが実際には登録されたユーザーが、サインアウトしてリダイレクトするために必要なすべてがあることを発見した:

  1. へあなたのユーザーテーブルにis_approvedまたは類似したものを追加し、
  2. を追加してactive_for_authenticationを追加しますか?あなたのUserモデル

コードでの方法:

class User < ActiveRecord::Base 

    # ... some code 

    def active_for_authentication? 
    super && is_approved 
    end 
end 

は、私はそれを必要なときに見つけることが少し大変でしたが、それがすべてです。私は実際に誰かがそれを必要とする場合に備えてここに書いています。

+0

非常に参考になりました。 [Docs](http://rubydoc.info/github/plataformatec/devise/master/Devise/Models/Authenticatable) – Hana

関連する問題