2011-01-25 22 views
12

İşte benim durumum, kullanıcıların sitemde hesabını oluşturmasına ve kimlik doğrulamasını yönetmelerine olanak sağlamak için kullanıyorum. Kayıt işlemi sırasında, müşterilerin gerçekten farklı bir hesabın oluşturulmasına yol açan bazı seçeneklerini değiştirmelerine izin veriyorum, ancak yine de aynı çekirdek kullanıcı kaynağına bağlı olarak . Bazı hesap türleri için bazılarının onay e-postasını göndermemeyi tercih ediyorum. Hesabın teyit edilmemesi ve kullanıcının giriş yapamaması umurumda değil, sorun değil, pb. Bunu yapmayı nasıl yaparım? Teşekkürler, AlexDevise: Belirli durumlarda bir onay e-postası göndermemek mümkün mü? (onaylanabilir etkin olsa bile)

cevap

20

Aslında biraz daha derine indiğimde oldukça kolaydır. Sadece kullanıcı modeli bir yöntemini geçersiz (veya kullandığınız her ne ise):

# Callback to overwrite if confirmation is required or not. 
    def confirmation_required? 
     !confirmed? 
    end 

şartlarınızı ve iş bitti koy!

Alex

+0

posta bir resend_confirmation veya send_reconfirmation içinde gönderilmez, yararlı ... –

+0

Vay vardır .. Süper havalı adam! – knagode

5

Ben fonksiyonları ile benzer bir şey yapmak başardı:

registrations_controller.rb

 
def build_resource(*args) 
    super 
    if session[:omniauth] # TODO -- what about the case where they have a session, but are not logged in? 
     @user.apply_omniauth(session[:omniauth]) 
     @user.mark_as_confirmed # we don't need to confirm the account if they are using external authentication 
     # @user.valid? 
    end 
    end 

Ve sonra benim kullanıcı modelinde:

user.rb

 
    def mark_as_confirmed 
    self.confirmation_token = nil 
    self.confirmed_at = Time.now 
    end 
8

Devise diğer cevaplar sunuldu sonra bu eklenirse bilmiyorum, ancak bunun için kod confirmable.rb doğru vardır:

# If you don't want confirmation to be sent on create, neither a code 
    # to be generated, call skip_confirmation! 
    def skip_confirmation! 
    self.confirmed_at = Time.now 
    end 
+1

Kullanıcıyı kaydetmeden önce bunu çağırmanız gerektiğini unutmayın, aksi takdirde "Onaylama talimatları" e-postası gönderilecektir. – dukedave

+2

Ayrıca benzer bir 'skip_reconfirmation!' Yöntemi –

10

Ayrıca sadece önce denetleyicisi kod aşağıdaki satırı ekleyebilirsiniz yeni kullanıcı oluşturma: sadece e-posta göndererek atlamak istiyorum ama onay yapmadığı takdirde,

@user.skip_confirmation! 
+0

'Create' eylemini aşırı yüklüyorsanız ve 'super do | user |' özelleştirme için kullanıyorsanız, atlamak için çok geç, e-postayı önceden gönderdikten sonra. Bu, örneğin, 'build_resource' içinde olmalıdır. –

11

kullanın:

# Skips sending the confirmation/reconfirmation notification email after_create/after_update. Unlike 
# #skip_confirmation!, record still requires confirmation. 
@user.skip_confirmation_notification! 

Bu yöntemi üzerine bir geri arama ile Modelinizdeki bu aramak istemiyorsanız:

def send_confirmation_notification? 
    false 
end 
İlgili konular