2011-09-19 47 views
54

Tôi tích hợp với facebook. Bây giờ khi tôi tạo tài khoản người dùng sau khi người dùng đã đăng nhập bằng tài khoản facebook của mình,Thiết lập - tạo tài khoản người dùng có xác nhận mà không cần gửi email?

user = User.create(:email => data["email"], 
        :password => Devise.friendly_token[0,20]) 
    user.confirmed_at = DateTime.now 
    user.save! 

mặc dù tài khoản đã được xác nhận, email xác nhận vẫn được kích hoạt. Bất kỳ ý tưởng làm thế nào tôi có thể tắt các email bắn?

+1

Lấy ': confirmation' ra khỏi danh sách các mô-đun được truyền để đưa ra trên lớp người dùng? Vì bạn không thực sự sử dụng nó. – numbers1311407

+1

nhưng những người dùng khác đăng ký trên trang web của tôi KHÔNG cần phải được xác nhận qua email – disappearedng

+5

Tôi nghĩ @disappeardng đang yêu cầu một trường hợp ngoại lệ. – user482594

Trả lời

125

Xác nhận gọi lại sẽ xảy ra sau khi tạo, vì vậy nó xảy ra trên dòng 1 của ví dụ của bạn, trước khi bạn đặt confirmed_at theo cách thủ công.

Theo nhận xét, điều chính xác nhất cần làm là sử dụng phương pháp được cung cấp cho mục đích này, #skip_confirmation!. Thiết lập confirmed_at theo cách thủ công sẽ hoạt động, nhưng nó phá vỡ API được cung cấp, đó là điều cần tránh khi có thể.

Vì vậy, một cái gì đó như:

user = User.new(user_attrs) 
user.skip_confirmation! 
user.save! 

Original câu trả lời:

Nếu bạn vượt qua confirmed_at cùng với create lập luận của bạn, qua đường bưu điện nên không được gửi đi, như sự thử thách của hay không một tài khoản đã được "xác nhận" là xem liệu ngày đó có được đặt hay không.

User.create(
    :email => data['email'], 
    :password => Devise.friendly_token[0,20], 
    :confirmed_at => DateTime.now 
) 

đó, hoặc chỉ sử dụng new thay vì create để xây dựng hồ sơ người dùng của bạn.

+0

fyi Tôi đã phải khai báo confirm_at như một attr_accessible (dunno nếu đó là một vi phạm an ninh tiềm năng). Khác hơn là công trình này! – disappearedng

+8

Sử dụng User.new và user.skip_confirmation! để tránh phải xác nhận quyền truy cập. – waldo

+0

Sử dụng tính năng mới không hoạt động khi email được gửi khi bạn gọi lưu! @ waldo gợi ý về skip_confirmation hoạt động mặc dù – Khash

9

Nếu bạn chỉ muốn ngăn chặn việc gửi email, bạn có thể sử dụng #skip_confirmation_notification, như vậy:

user = User.new(your, args) 
user.skip_confirmation_notification! 
user.save! 

Xem documentation

bỏ qua gửi email thông báo xác nhận/xác nhận lại after_create/after_update. Không giống như #skip_confirmation !, bản ghi vẫn còn yêu cầu xác nhận.

+0

Điều này làm việc cho tôi! Câu trả lời hàng đầu không. :(Cảm ơn! :) –

Các vấn đề liên quan