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-mail
và token
. 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.
Nguồn
2012-01-12 22:00:38
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
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. –
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