2010-08-02 14 views
12

से सदस्यता रद्द करने के लिए लिंक कैसे उत्पन्न करें मेरे पास एक साधारण रेल ऐप है जहां उपयोगकर्ता 10+ लोगों को जन ईमेल भेज सकता है। इस ईमेल में मैं हमेशा नीचे एक लिंक रखना चाहता हूं जो अंतिम उपयोगकर्ता अधिसूचनाओं से स्वयं सदस्यता समाप्त करने के लिए क्लिक कर सकता है। मुझे नहीं पता कि मुझे इससे कैसे निपटना चाहिए।ईमेल

क्या ईमेल में केवल एक सामान्य लिंक हो सकता है, जिसे उपयोगकर्ता क्लिक करते हैं, फिर अपने ईमेल पते को स्वयं सदस्यता रद्द करने के लिए दर्ज करते हैं? लेकिन इसके साथ समस्या यह है कि कुछ अन्य उपयोगकर्ता किसी और की सदस्यता रद्द कर सकते हैं।

मैं प्रत्येक ईमेल के लिए एक विशिष्ट अद्वितीय लिंक उत्पन्न करना चाहता हूं ताकि जब उपयोगकर्ता इसे क्लिक करता है, तो यह उपयोगकर्ता को कुछ अतिरिक्त काम करने के बजाय स्वचालित रूप से उस उपयोगकर्ता को सूची से हटा देता है।

इसे लागू करने के लिए मुझे कहां से शुरू करना चाहिए?

+0

हाय @ पैट्रिक, क्या आप मेरे साथ अपना अंतिम समाधान साझा कर सकते हैं क्योंकि मैं इसे देख रहा हूं, धन्यवाद – iCyborg

+2

आप इस ट्यूटोरियल को आजमा सकते हैं, बहुत उपयोगी http://ngauthier.com/2013/01/rails-unsubscribe-with -active-support-message-verifier.html – duykhoa

उत्तर

13

आपका सदस्यता समाप्त लिंक ऐसा दिखाई दे सकता: http://host/application/[email protected]&token=598bbdf39bc8f27b07fe85b6a7dd8decef641605

टोकन ईमेल पते और एक जादू टोकन का उपयोग उत्पन्न करें। ईमेल पते से मेल करने के लिए

$ echo "secret token [email protected]" | sha1sum 
598bbdf39bc8f27b07fe85b6a7dd8decef641605 - 

secret token भाग अपने आवेदन में निर्धारित किया जाएगा, और [email protected] जरूरतों: आदर्श रूप में, आप SHA256 साथ HMAC का उपयोग करते हैं, लेकिन यहां तक ​​कि बस SHA1 'काफी अच्छा' होना चाहिए।

बेशक, यदि गुप्त टोकन कभी प्रकट होता है, तो आप किसी को भी सदस्यता छोड़ने वाले किसी भी व्यक्ति के पास वापस आ जाते हैं। आप URL में टोकन को सत्यापित करने के लिए अपने डेटाबेस में प्रति-उपयोगकर्ता जादू टोकन भी स्टोर कर सकते हैं, जो इससे कहीं अधिक कठिन नहीं होगा, और निश्चित रूप से अधिक सुरक्षित होगा।

+0

मुझे यह विचार पसंद है। लेकिन कुछ सवाल। मैं रेल के अंदर से टोकन कैसे उत्पन्न करूं? और वह टोकन प्रत्येक व्यक्ति से जुड़ा होगा जो ईमेल प्राप्त करता है? (डीबी में एक नया स्तंभ)। तो जब उपयोगकर्ता सदस्यता समाप्त करने के लिए क्लिक करता है, तो मेरे रेल कोड टोकन को पढ़ता है .... तालिका पर लुकअप करता है और सदस्यता रद्द करता है अगर उसे उस टोकन – Patrick

+0

@ पैट्रिक, [जेसी के] के साथ एक व्यक्ति मिल जाता है (http://stackoverflow.com/users/363881/जेसे-वोल्गामॉट) उत्तर में 'सिक्योररैंडम' शामिल है, जो जादू टोकन के लिए एक महान स्रोत की तरह लगता है। आप या तो अपने उपयोगकर्ता मॉडल में टोकन स्टोर कर सकते हैं या केवल उपयोगकर्ता आईडी और सदस्यता रद्द टोकन के साथ एक नई तालिका बना सकते हैं, और जब आप ईमेल भेजते हैं तो इसे पॉप्युलेट कर सकते हैं। – sarnold

+2

यह केवल एक टोकन का उपयोग करने की तुलना में कैसे किया जाएगा जिसमें एन्क्रिप्टेड ईमेल पता (धोया नहीं गया), और एक गुप्त टोकन या दो शामिल है, फिर उन दस्तावेज़ों को जांचने के लिए डिक्रिप्ट कर रहा है जो गुप्त टोकन ईमेल पते से सहमत हैं? मैं सोच रहा हूं कि गुप्त टोकन ऐसी चीजें हो सकती हैं जो पहले से मौजूद हैं जैसे कि उपयोगकर्ता की आईडी या तिथि जोड़ी गई है। – mikato

3

आप EmailTemplate के लिए एक मॉडल और सब्सक्राइबर के लिए एक मॉडल है, तो अपने कोड की तरह कुछ दिख सकता है:

@email_template = EmailTemplate.find(3) 
@email_template.subscribers.each do |subscriber| 
    Notifier.deliver_template(:email_template=>@email_template, :subscriber=>subscriber) 
end 
तो

, आप

email_delivery = EmailDelivery.create(:email_template=>@email_template, :subscriber=>subscriber) 
Notifier.deliver_template(email_delivery) 

और फिर email_delivery के before_create को बदल सकता है एक टोकन उत्पन्न करता है। ईमेल_डिलीवरी प्रति यादृच्छिक पासवर्ड जेनरेटर अच्छा होना चाहिए। SecureRandom यादृच्छिक टोकन पर एक अच्छा काम करता है: p SecureRandom.hex(10) #=> "52750b30ffbc7de3b362"

अपने ईमेल में उस ईमेल_डिल्वरी टोकन को शामिल करें, और उसके बाद पूरी तरह से एक लुकअप करें।

+0

मैंने अभी तक नियंत्रक/मॉडल नहीं बनाए हैं लेकिन मैं आपके दृष्टिकोण को भी आजमाउंगा। – Patrick