2011-01-24 16 views
10

Her yere baktım ve çok fazla bilgi buldum ... ama hiçbir şey benim için çalışmıyor ve bunu anlamıyorum :(Başarılı bir sign_up işlemi tamamlandıktan sonra bir yönlendirmeye izin vermek için Devise'nin kayıt denetleyicisini geçersiz kılma

seni böyle bir kayıt denetleyicisi geçersiz kılmak için varsayalım olduğunu biliyoruz:

class Users::RegistrationsController < Devise::RegistrationsController 

def after_sign_up_path_for(resource) 
    authors_waiting_path 
end 

end 

Sonra Tony Amoyal http://www.tonyamoyal.com/2010/07/28/rails-authentication-with-devise-and-cancan-customizing-devise-controllers/ tarafından gösterdi örnek aşağıdaki, ben erişim yeni denetleyicisi güncellemek için benim güzergah değiştirmek gerekiyor :

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 

Evet, burada biraz garip bir şey var, çünkü onları kayıt sayfasına göndermek için belirli bir yol yakaladım, bu da etkin bir şekilde 2 kayıt senaryosu yaratmamı sağlıyor. Kayıt kontrolörünü geçersiz kılmadan önce neyim olduğunu yorumladım.

bile tüm bu

ve geçerli bir yol olmak benim authors_waiting_path, sadece kayıt :(

Bu gerçekten sinir bozucu sonra oturum açma sayfasına-gidiş devam ediyor.

Alex

düzenlemek : Ben de vasiyetle wiki üzerinde buldum: https://github.com/plataformatec/devise/wiki/How-To:-Redirect-after-registration-(sign-up)

Ama nerede bu yöntemi oluşturmak tanımlamak Ben oturumu denetleyicisi ???

geçersiz gerektiğini bilmiyor musunuz?

düzenleme 2: Gerçekten tamamen görmezden geliyor o duygu var .... Günlüklerimde "burada" asla

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 

Ve:

Ben kumandanın bir kukla kılma koymak geçersiz kılma ... yanlış bir şey :(

+0

Hangi rayların sürümünü kullanıyorsunuz? Hangi versiyon versiyonu? –

+0

Rails 3.0.3 ve 1.1.5 de, her ikisi de son sürümünün doğru olması durumunda – Alex

cevap

9

Tamam yapıyor olmalı ... Öyle bunu geçersiz kılabilir ya gerektiğini am: 0

klasör uygulaması/kontrolörleri/kullanıcıları oluşturma

orada registrations_controller.rb ile: (oturumda seçenek - ancak sign_in ve daha sonra yeniden yönlendirmeyi deneyecek - sizin için amaçlanmış bir davranış olmayabilir). Üstelik bu vasiyetle vikiden olduğunu ve

class Users::RegistrationsController < Devise::RegistrationsController 

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

end 

yeniden başlatma uygulaması çalışıyorsa ben ise Sonuçta Oluştur üzerine yazılmış olmalıdır


(sağlamak sadece için bir şey güvenmiyorum) emin değilim sadece kullanıcıları yönlendirmek istediğiniz ... Eğer

böylece denetleyici irade

benziyor sign_in_and_redirect sen monkeypatch gereken bazı daha karmaşık bir senaryo tanımlamak istiyorsanız 10

İkinci seçenek maymun yardımcı programını çalıştırmayı deneyin ....

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

Üzgünüm, ama ne yapmak istediğimi kafa karıştırıcı olduğunu düşünüyorum, IN imzalamak için AVI üye UP yönlendirmek için wan. Oturum açma işlemini zaten hallediyorum, yalnızca onay e-postalarını etkinleştirirken kullanıcılarımı bir bekleme sayfasına yönlendirmek istiyorum. Ve evet sen sign_in yolunu geçersiz kılma yöntemi doğrudur, ana uygulama denetleyicide, ancak ne yazık ki sonra kayıt yöntemi değil :) Bu arada, bu yöntemlerin her yerinde olması mantıklı değil mi diye düşünüyorum – Alex

+0

Düzenleme: Kodumu –

+0

ekledim, benim hatam, Kodunuzun bu denetleyiciye tam olarak uyduğundan emin misiniz? Belki yeni bir "yükseltmek" yükseltmek ve doğru –

3

yukarıda çözüm denedim ve işe yarıyor yaparken kodu hazırlamak okuma, sana aslında sadece kayıtlı kullanıcıyı-çıkış yapmak ve yönlendirmek amacıyla gereken tüm olduğunu bulduk:

  1. için active_for_authentication eklemek için kullanıcı tablonuza ve
  2. 'a benzer is_approved veya benzer ekler mi? Kullanıcı modelinde yöntem

Kodu:

class User < ActiveRecord::Base 

    # ... some code 

    def active_for_authentication? 
    super && is_approved 
    end 
end 

o gerektiğinde bulmak biraz zor oldu, ama hepsi bu kadar. Başka birinin buna ihtiyacı varsa, aslında burada yazıyorum.

+0

Çok yardımcı, bunun için teşekkürler. [Dokümanlar] (http://rubydoc.info/github/plataformatec/devise/master/Devise/Models/Authenticatable) – Hana