2012-01-12 20 views
11

Tôi có mẫu đăng ký với một trường email duy nhất. Khi người dùng nhập email, tôi cần gửi liên kết đăng ký.Node.js - Gửi email về đăng ký

Tôi đã xem ví dụ this Node.js với biểu mẫu đăng ký. Nhưng nó chỉ có tính năng sendWelcome.

Có bất kỳ ví dụ nào về ứng dụng Node.js có gửi email đăng ký không?

Trả lời

22

Tôi chưa thấy ví dụ như vậy cho đến nay, nhưng câu hỏi phụ của bạn là gì? Ví dụ bạn đã cung cấp cho thấy khá tốt cách gửi e-mail. Một lựa chọn khác là sử dụng gói này:

https://github.com/Marak/node_mailer

nào cũng dường như được lập hồ sơ tốt về cách gửi e-mail.

Vì vậy, tôi giả sử rằng bạn muốn biết cách thiết lập hệ thống đăng ký. Một cách để thực hiện việc này là có bảng đăng ký người dùng có các cột e-mailtoken. E-mail là hiển nhiên, token là một chuỗi được tạo ngẫu nhiên (ví dụ với phương pháp crypto.randomBytes của nút) sẽ được gửi dưới dạng một phần của liên kết tới người dùng. Khi nhập liên kết, bạn tìm kiếm cơ sở dữ liệu cho mã thông báo này và nếu nó được tìm thấy, bạn tiến hành đăng ký.

Hai điều cần lưu ý: khi tạo mã thông báo, hãy đảm bảo rằng nó không tồn tại trong db. Thứ hai: bạn nên sử dụng cột valid_until để xóa mã thông báo cũ hơn vài giờ.

Cập nhật:

Thật không may, xuất khẩu base64 nút được không url-an toàn. Vì vậy, đây là phương pháp đơn giản nhất để có được những dấu hiệu an toàn tôi đã tìm thấy:

require('crypto').randomBytes(48, function(ex, buf) { 
    token = buf.toString('base64').replace(/\//g,'_').replace(/\+/g,'-')); 
}); 

Perhaps someone will come up with a better solution.

+0

Cảm ơn bạn đã trả lời. Tôi thấy module node_mailer Tôi quan tâm đến phương thức tạo token. Nhưng tôi cần phải xem một số ví dụ mạnh mẽ để xem bất kỳ thực hành nào để ngăn chặn hacker tấn công. Công thức của bạn có an toàn không? – Erik

+1

Vâng, tôi đoán nó an toàn như một e-mail. Bạn không thể xác minh người dùng bằng mật khẩu vì bạn chưa có mật khẩu, vì vậy bạn phải tin tưởng rằng người dùng biết mã thông báo bí mật gửi qua e-mail là chủ sở hữu email thực sự. Nếu bạn muốn bảo vệ thêm, bạn có thể kiểm tra IP yêu cầu cùng với thời gian. Tôi không biết về các ví dụ về nút, nhưng tôi đã thấy nguyên tắc này được sử dụng trong các ứng dụng đường ray xung quanh. –

+0

Cảm ơn. Và câu hỏi cuối cùng: Tôi nên tạo mã thông báo như thế nào? bằng cách sử dụng crypto.randomBytes chỉ hoặc tôi nên keo email + IP + cái gì khác? – Erik