2011-01-25 25 views
12

Đây là tình huống của tôi, tôi sử dụng để cho phép người dùng tạo tài khoản trên trang web của tôi và quản lý xác thực của họ. Trong quá trình đăng ký, tôi cho phép khách hàng thay đổi một số tùy chọn , dẫn đến một tài khoản thực sự khác được tạo nhưng vẫn dựa trên cùng một tài nguyên người dùng cốt lõi. Tôi muốn chọn không gửi email xác nhận cho một số loại các loại tài khoản đó. Tôi không quan tâm nếu tài khoản không được xác nhận và người dùng không thể đăng nhập, điều đó không sao, không có pb với điều đó. Tôi sẽ làm như thế nào? Cảm ơn, AlexThiết lập: Có thể KHÔNG gửi email xác nhận trong các trường hợp cụ thể không? (ngay cả khi có thể xác nhận được kích hoạt)

Trả lời

20

Thực ra nó khá dễ dàng khi tôi đào sâu hơn một chút. Chỉ cần ghi đè lên một phương pháp trong mô hình tài khoản của bạn (hoặc bất cứ điều gì bạn đang sử dụng):

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

Đặt điều kiện của bạn và công việc của done!

Alex

+0

Các email sẽ không được gửi trong một resend_confirmation hoặc một send_reconfirmation, đó là hữu ích ... –

+0

Wow .. Người đàn ông siêu mát mẻ! – knagode

5

tôi đã có thể làm điều gì đó tương tự với các chức năng:

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 

Và sau đó trong mô hình người dùng của tôi:

user.rb

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

Tôi không biết nếu lập mưu bổ sung này sau khi câu trả lời khác đã được nộp, nhưng mã cho điều này là ngay trong confirmable.rb:

# 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

Lưu ý rằng bạn nên gọi điều này trước khi lưu người dùng, nếu không email "Xác nhận hướng dẫn" sẽ được gửi. – dukedave

+2

Cũng có phương thức 'skip_reconfirmation!' Tương tự –

10

Bạn cũng có thể chỉ cần thêm dòng mã sau đây trong điều khiển của bạn trước tạo người dùng mới:

@user.skip_confirmation! 
+0

Nếu bạn đang quá tải 'create' action và sử dụng' super do | user | 'để tùy chỉnh, đã quá muộn để bỏ qua, hãy nghĩ rằng đã gửi email. Điều này nên đi trong 'build_resource', ví dụ. –

11

Nếu bạn chỉ muốn bỏ qua việc gửi email nhưng không làm xác nhận, sử dụng:

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

Nếu bạn không muốn gọi này trong mô hình của bạn với một callback ghi đè phương pháp này:

def send_confirmation_notification? 
    false 
end 
Các vấn đề liên quan