ในบทความนี้ ฉันจะแบ่งปันวิธีที่ฉันสร้างโฟลว์การลงชื่อสมัครรับข้อมูลด้วยความรักด้วยการยืนยันทางอีเมลที่ไม่มีปัญหา คุณก็ทำได้เช่นกัน
หากคุณต้องการเห็นการใช้งานจริง คุณสามารถสมัครรับรายชื่ออีเมลของฉันได้ที่ victoria.dev
ตอนนี้ฉันจะแสดงให้คุณเห็นว่าฉันสร้างมันอย่างไร
แนะนำการสมัครรับข้อมูลแบบง่าย
หากคุณสนใจที่จะจัดการรายชื่อส่งเมลหรือจดหมายข่าวของคุณเอง คุณสามารถตั้งค่า Simple Subscribe บนทรัพยากร AWS ของคุณเองเพื่อรวบรวมที่อยู่อีเมล
API แบบโอเพนซอร์สนี้เขียนในภาษา Go และทำงานบน AWS Lambda ผู้เยี่ยมชมไซต์ของคุณสามารถลงทะเบียนในรายการของคุณ ซึ่งจัดเก็บไว้ในตาราง DynamoDB พร้อมที่จะสอบถามหรือส่งออกตามที่คุณต้องการ
เมื่อมีคนลงชื่อสมัครใช้ พวกเขาจะได้รับอีเมลที่ขอให้ยืนยันการสมัครรับข้อมูล บางครั้งเรียกว่า "การเลือกใช้สองครั้ง" แม้ว่าฉันจะชอบคำว่า "ยืนยันแล้ว"
Simple Subscribe ทำงานบนโครงสร้างพื้นฐานแบบไร้เซิร์ฟเวอร์และใช้ AWS Lambda เพื่อจัดการการสมัครรับข้อมูล การยืนยัน และคำขอยกเลิกการสมัคร
คุณสามารถค้นหาโปรเจ็กต์ Simple Subscribe ด้วยโค้ดโอเพนซอร์ซแบบเต็มได้ที่ GitHub ฉันแนะนำให้คุณดึงรหัสและทำตาม!
ในโพสต์นี้ ฉันจะแชร์แต่ละขั้นตอนของบิลด์ กระบวนการคิดที่อยู่เบื้องหลังฟังก์ชันความรับผิดชอบเดียวของ API และข้อควรพิจารณาด้านความปลอดภัยสำหรับโปรเจ็กต์ AWS แบบนี้
วิธีสร้างขั้นตอนการสมัครสมาชิกที่ได้รับการยืนยัน
กระบวนการลงทะเบียนอีเมลที่ไม่ได้รับการยืนยันนั้นตรงไปตรงมา มีคนใส่อีเมลลงในกล่องบนเว็บไซต์ของคุณ จากนั้นอีเมลนั้นก็จะเข้าสู่ฐานข้อมูลของคุณ
อย่างไรก็ตาม หากฉันได้สอนคุณเกี่ยวกับการไม่เชื่อถือข้อมูลของผู้ใช้ แนวคิดของกระบวนการลงชื่อสมัครใช้ที่ไม่ผ่านการตรวจสอบควรเพิ่มการแฮ็กของคุณ สแปมอาจยอดเยี่ยมเมื่อนำไปผัดในแซนวิช แต่มันไม่สนุกเลยเมื่อบิล AWS ของคุณใกล้หมด
แม้ว่าคุณจะใช้กลยุทธ์อย่างเช่น CAPTCHA หรือปริศนาสำหรับการยืนยันตัวตนได้ แต่สิ่งเหล่านี้สามารถสร้างความขัดแย้งได้มากพอที่จะปฏิเสธผู้ที่อาจเป็นสมาชิกของคุณ
แต่อีเมลยืนยันสามารถช่วยให้แน่ใจว่าทั้งที่อยู่ถูกต้องและความรู้สึกของผู้ใช้
ในการสร้างโฟลว์การสมัครรับข้อมูลด้วยการยืนยันทางอีเมล ให้สร้างฟังก์ชันความรับผิดชอบเดียวที่ตรงตามแต่ละขั้นตอนเชิงตรรกะ ได้แก่:
- ยอมรับที่อยู่อีเมลและบันทึกไว้
- สร้างโทเค็นที่เชื่อมโยงกับที่อยู่อีเมลนั้นและบันทึกไว้
- ส่งอีเมลยืนยันไปยังที่อยู่อีเมลนั้นด้วยโทเค็น
- ยอมรับคำขอยืนยันที่มีทั้งที่อยู่อีเมลและโทเค็น
เพื่อให้บรรลุเป้าหมายแต่ละข้อ Simple Subscribe ใช้ AWS SDK for Go อย่างเป็นทางการเพื่อโต้ตอบกับ DynamoDB และ SES
ในแต่ละขั้นตอน ให้พิจารณาว่าข้อมูลมีลักษณะอย่างไรและจัดเก็บอย่างไร สิ่งนี้สามารถช่วยจัดการกับปริศนาเช่น “จะเกิดอะไรขึ้นถ้ามีคนพยายามสมัครรับข้อมูลสองครั้ง” หรือแม้แต่การสร้างแบบจำลองภัยคุกคาม เช่น “ถ้ามีคนสมัครรับข้อมูลด้วยอีเมลที่พวกเขาไม่ได้เป็นเจ้าของล่ะ”
พร้อม? มาทำลายแต่ละขั้นตอนและดูว่าเวทมนตร์เกิดขึ้นได้อย่างไร
กำลังติดตาม
กระบวนการสมัครรับข้อมูลเริ่มต้นด้วยเว็บฟอร์มที่เรียบง่าย เช่นเดียวกับที่อยู่ในหน้าหลักของเว็บไซต์ แบบฟอร์มอินพุตพร้อมแอตทริบิวต์ type="email" required
ช่วยในการตรวจสอบด้วยเบราว์เซอร์ เมื่อส่งแล้ว แบบฟอร์มจะส่งคำขอ GET ไปยังจุดสิ้นสุดการสมัครรับข้อมูล Simple Subscribe
Simple Subscribe ได้รับคำขอ GET ไปยังปลายทางนี้ด้วยสตริงการสืบค้นที่มีอีเมลของสมาชิกที่ต้องการ จากนั้นจะสร้าง id
และเพิ่มทั้ง email
และ id
ไปยังตาราง DynamoDB ของคุณ
รายการตารางตอนนี้ดูเหมือนว่า:
อีเมล | ยืนยัน | id | ประทับเวลา |
---|---|---|---|
[email protected] | เท็จ | uuid-xxxxx | 2020-11-01 00:27:39 |
confirm
คอลัมน์ซึ่งมีบูลีนแสดงว่ารายการนั้นเป็นคำขอสมัครรับข้อมูลที่ยังไม่ได้รับการยืนยัน หากต้องการยืนยันที่อยู่อีเมลในฐานข้อมูล คุณจะต้องค้นหารายการที่ถูกต้องและเปลี่ยน confirm
ถึง true
.
ขณะที่คุณทำงานกับข้อมูลของคุณ ให้พิจารณาเป้าหมายของการจัดการแต่ละครั้งและวิธีที่คุณอาจเปรียบเทียบคำขอที่เข้ามากับข้อมูลที่มีอยู่
ตัวอย่างเช่น ถ้ามีคนส่งคำขอสมัครรับข้อมูลสำหรับที่อยู่อีเมลเดียวกันในภายหลัง คุณจะจัดการกับมันอย่างไร
คุณอาจพูดว่า “สร้างรายการโฆษณาใหม่ด้วย id
. ใหม่ " อย่างไรก็ตาม นี่อาจไม่ใช่กลยุทธ์ที่ดีที่สุดเมื่อฐานข้อมูลแอปพลิเคชันแบบไร้เซิร์ฟเวอร์ของคุณได้รับการชำระเงินตามปริมาณคำขอ
เนื่องจากการกำหนดราคา DynamoDB ขึ้นอยู่กับปริมาณข้อมูลที่คุณอ่านและเขียนลงในตารางของคุณ การหลีกเลี่ยงการซ้อนข้อมูลส่วนเกินจึงเป็นประโยชน์
ด้วยเหตุนี้ จึงควรระมัดระวังในการจัดการคำขอสมัครรับข้อมูลสำหรับอีเมลเดียวกันโดยดำเนินการอัปเดตแทนที่จะเพิ่มบรรทัดใหม่
Simple Subscribe ใช้ฟังก์ชันเดียวกันเพื่อเพิ่มหรืออัปเดตรายการฐานข้อมูล โดยทั่วไปจะเรียกว่า “อัปเดตหรือแทรก”
ในฐานข้อมูลเช่น SQLite สิ่งนี้ทำได้โดยใช้ไวยากรณ์ของ UPSERT ในกรณีของ DynamoDB คุณใช้การดำเนินการอัปเดต สำหรับ Go SDK ไวยากรณ์ของมันคือ UpdateItem
.
เมื่อได้รับคำขอสมัครสมาชิกที่ซ้ำกัน รายการฐานข้อมูลจะถูกจับคู่ใน email
เท่านั้น. หากพบรายการโฆษณาที่มีอยู่ id
และ timestamp
ถูกแทนที่ ซึ่งจะอัปเดตบันทึกฐานข้อมูลที่มีอยู่และหลีกเลี่ยงไม่ให้ตารางของคุณล้นด้วยคำขอที่ซ้ำกัน
วิธีการยืนยันที่อยู่อีเมล
หลังจากส่งแบบฟอร์มแล้ว สมาชิกที่ต้องการจะได้รับอีเมลจาก SES ที่มีลิงก์ ลิงค์นี้สร้างขึ้นโดยใช้ email
และ id
จากตารางและใช้รูปแบบ:
<BASE_URL><VERIFY_PATH>/[email protected]&id=uuid-xxxxx
ในการตั้งค่านี้ id
เป็น UUID ที่ทำหน้าที่เป็นโทเค็นลับ มันมีตัวระบุที่คุณสามารถจับคู่ที่ซับซ้อนเพียงพอและคาดเดาได้ยาก วิธีการนี้จะป้องกันไม่ให้ผู้คนสมัครรับอีเมลด้วยที่อยู่อีเมลที่พวกเขาไม่ได้ควบคุม
การเยี่ยมชมลิงก์จะส่งคำขอไปยังปลายทางการยืนยันของคุณด้วย email
และ id
ในสตริงการสืบค้น
คราวนี้มาเปรียบเทียบทั้ง email
. ที่เข้ามา และ id
ค่าลงในบันทึกฐานข้อมูล นี่เป็นการยืนยันว่าผู้รับอีเมลยืนยันกำลังเริ่มต้นคำขอ
ปลายทางการตรวจสอบช่วยให้แน่ใจว่าค่าเหล่านี้ตรงกับรายการในฐานข้อมูลของคุณ จากนั้นดำเนินการอัปเดตอื่นเพื่อตั้งค่า confirm
ถึง true
และอัปเดตการประทับเวลา รายการตอนนี้ดูเหมือนว่า:
อีเมล | ยืนยัน | id | ประทับเวลา |
---|---|---|---|
[email protected] | จริง | uuid-xxxxx | 2020-11-01 00:37:39 |
วิธีการสอบถามอีเมล
ตอนนี้คุณสามารถสอบถามตารางของคุณเพื่อสร้างรายชื่ออีเมลของคุณ คุณอาจดำเนินการด้วยตนเอง กับ Lambda อื่น หรือแม้กระทั่งจากบรรทัดคำสั่ง ทั้งนี้ขึ้นอยู่กับโซลูชันการส่งอีเมลของคุณ
เนื่องจากข้อมูลสำหรับการสมัครสมาชิกที่ร้องขอ (โดยที่ confirm
คือ false
) ถูกจัดเก็บไว้ในตารางควบคู่ไปกับการสมัครรับข้อมูลที่ยืนยันแล้ว สิ่งสำคัญคือต้องแยกความแตกต่างของข้อมูลนี้เมื่อทำการสอบถามที่อยู่อีเมลที่จะส่งไป คุณจะต้องแน่ใจว่าคุณส่งคืนเฉพาะอีเมลที่ confirm
คือ true
.
วิธีระบุลิงก์ยกเลิกการสมัคร
คล้ายกับการยืนยันที่อยู่อีเมล Simple Subscribe ใช้ email
และ id
เป็นอาร์กิวเมนต์ของฟังก์ชันที่จะลบรายการออกจากตาราง DynamoDB ของคุณเพื่อยกเลิกการสมัครที่อยู่อีเมล
หากต้องการให้คนอื่นลบตัวเองออกจากรายชื่อ คุณจะต้องระบุ URL ในแต่ละอีเมลที่คุณส่งซึ่งมี email
ของพวกเขา และ id
เป็นสตริงการสืบค้นไปยังจุดสิ้นสุดการยกเลิกการสมัคร มันจะมีลักษณะดังนี้:
<BASE_URL><UNSUBSCRIBE_PATH>/[email protected]&id=uuid-xxxxx
เมื่อมีการคลิกลิงก์ สตริงการสืบค้นจะถูกส่งไปยังปลายทางการยกเลิกการสมัคร หากระบุ email
และ id
ตรงกับรายการฐานข้อมูล รายการนั้นจะถูกลบออก
การพิสูจน์วิธีการสำหรับสมาชิกของคุณเพื่อลบตัวเองออกจากรายการของคุณโดยอัตโนมัติ โดยไม่จำเป็นต้องมีการแทรกแซงของมนุษย์ เป็นส่วนหนึ่งของปรัชญาที่มีจริยธรรมและให้เกียรติในการจัดการข้อมูลที่ได้รับมอบหมายให้คุณ
วิธีดูแลข้อมูลของคุณ
เมื่อคุณตัดสินใจยอมรับข้อมูลของผู้อื่น จะกลายเป็นความรับผิดชอบของคุณในการดูแลข้อมูลนั้น สิ่งนี้ใช้ได้กับทุกสิ่งที่คุณสร้าง สำหรับ Simple Subscribe หมายถึงการรักษาความปลอดภัยของฐานข้อมูลของคุณ และตัดตารางของคุณเป็นระยะ
เพื่อหลีกเลี่ยงการรักษาที่อยู่อีเมลที่ confirm
คือ false
เมื่อพ้นกรอบเวลาที่กำหนดแล้ว จะเป็นความคิดที่ดีที่จะตั้งค่าฟังก์ชันการทำความสะอาดที่ทำงานตามกำหนดเวลาปกติ ซึ่งสามารถทำได้ด้วยตนเองด้วยฟังก์ชัน AWS Lambda หรือใช้บรรทัดคำสั่ง
หากต้องการล้างข้อมูล ให้ค้นหารายการฐานข้อมูลที่ confirm
คือ false
และ timestamp
มีอายุมากกว่าช่วงเวลาใดเวลาหนึ่ง ขึ้นอยู่กับกรณีการใช้งานและปริมาณคำขอของคุณ ความถี่ที่คุณเลือกที่จะล้างข้อมูลจะแตกต่างกันไป
ทั้งนี้ขึ้นอยู่กับกรณีการใช้งานของคุณ คุณอาจต้องการสำรองข้อมูลของคุณ หากคุณกังวลเป็นพิเศษเกี่ยวกับความสมบูรณ์ของข้อมูล คุณสามารถสำรวจการสำรองข้อมูลแบบออนดีมานด์หรือการกู้คืนตามเวลาสำหรับ DynamoDB
สร้างฐานสมาชิกอิสระของคุณ
การสร้างรายชื่อสมาชิกของคุณเองอาจเป็นความพยายามอันทรงพลัง! ไม่ว่าคุณจะตั้งใจจะเริ่มต้นจดหมายข่าว ส่งการแจ้งเตือนสำหรับเนื้อหาใหม่ หรือต้องการสร้างชุมชนเกี่ยวกับงานของคุณ ไม่มีอะไรที่เป็นส่วนตัวหรือส่งตรงไปกว่าอีเมลจากฉันถึงคุณ
ฉันแนะนำให้คุณเริ่มสร้างฐานสมาชิกของคุณด้วย Simple Subscribe วันนี้ เช่นเดียวกับงานส่วนใหญ่ของฉัน มันเป็นโอเพ่นซอร์สและฟรีสำหรับการใช้งานส่วนตัวของคุณ เจาะลึกโค้ดที่ที่เก็บ GitHub หรือเรียนรู้เพิ่มเติมที่ SimpleSubscribe.org
หากคุณชอบโพสต์นี้ ฉันก็อยากจะรู้ เข้าร่วมกับผู้คนนับพันที่เรียนรู้ไปพร้อมกับฉันที่ victoria.dev เยี่ยมชมหรือสมัครผ่าน RSS สำหรับโครงการเพิ่มเติมเช่นนี้