Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

ประมวลผลฟอร์มเว็บอย่างปลอดภัยด้วย phpPress, goPress, rubyPress และ nodePress

ตอนนี้คุณมีเว็บไซต์ที่ใช้ระบบไฟล์แบน (flat file system) แล้ว และอยากได้ฟีดแบ็กจากผู้ใช้ การเพิ่ม Disqus ง่ายเพราะเป็นแค่ JavaScript แทรกในหน้า แต่ไม่ใช่สิ่งที่คุณต้องการ คุณอยากให้พวกเขาส่งอีเมลมาโดยตรง เพื่อให้คุณตอบกลับได้เฉพาะตัว

คุณอาจสร้างระบบ JavaScript ส่งอีเมลจากเครื่องผู้ใช้โดยตรง แต่จะทำให้อีเมลของคุณโดนสแปมเมอร์ดึงจากโค้ดไปขายให้สแปมเมอร์อื่น ดังนั้นคุณต้องซ่อนอีเมลไว้บนเซิร์ฟเวอร์

บทช่วยสอนนี้เกี่ยวกับการเพิ่มระบบส่งข้อความอีเมลไปยัง PressCMS ใหม่ของคุณ (คือ phpPress, rubyPress, nodePress, และ goPress) ผมจะเริ่มจาก front-end แล้วค่อยไปที่ back-end ของแต่ละระบบ สมมติว่าคุณมีเซิร์ฟเวอร์เหล่านี้บนระบบแล้ว

วิธีสร้างฟอร์มในเบราว์เซอร์

โค้ด front-end จะเหมือนกันทุกเซิร์ฟเวอร์ คุณต้องคัดลอกไฟล์ใหม่ๆ ไปยังไดเรกทอรีของแต่ละเซิร์ฟเวอร์ ผมจะอ้างอิง path จากไดเรกทอรีเซิร์ฟเวอร์

แทนที่จะเพิ่มสไตล์ฟอร์มในธีม สคริปต์ฟอร์มนี้รวมทุกอย่างไว้ที่เดียว สร้างไฟล์ questions.html ในไดเรกทอรี site/parts ของเว็บไซต์ เนื้อหาดังนี้:

ฟอร์มขอข้อมูล: ชื่อ-นามสกุล (first and last name), อีเมล, และข้อความ ใช้ regular expressions ตรวจสอบความถูกต้องของชื่อและอีเมล หากผู้ใช้กรอกไม่ตรง pattern ใน pattern ฟอร์มจะไม่ส่ง และโชว์ popup ขอให้กรอกให้ถูกต้องตามข้อความใน title แต่ละฟิลด์มี required ป้องกันการส่งฟอร์มว่าง นี่คือ validation ขั้นพื้นฐานขั้นต่ำบน front-end

action ใน form บอกเบราว์เซอร์ว่าส่งข้อมูลไปที่ URL ไหน method บอกว่าเป็น post ข้อมูลฟอร์มจะอยู่ใน URL ของ post request — เรียกว่า Query String เซิร์ฟเวอร์จะประมวลผลข้อมูลใน query string นี้

ในไดเรกทอรี site/pages สร้างไฟล์ contact.md ใส่โค้ดนี้:

บันทึกแล้วลองเปิดในเบราว์เซอร์: https://localhost:8081/contact

ประมวลผลฟอร์มเว็บอย่างปลอดภัยด้วย phpPress, goPress, rubyPress และ nodePress ประมวลผลฟอร์มเว็บอย่างปลอดภัยด้วย phpPress, goPress, rubyPress และ nodePress ประมวลผลฟอร์มเว็บอย่างปลอดภัยด้วย phpPress, goPress, rubyPress และ nodePress
หน้าฟอร์มติดต่อ

หน้า Contact Us จะเห็นแบบรูปข้างบน สังเกตช่อง Name ถูก focus อัตโนมัติตอนโหลด ด้วย autofocus — UX ที่ดีควร focus ช่องแรกที่ผู้ใช้ต้องพิมพ์

หลังส่งข้อความ ควรมีหน้ายืนยัน ใน site/pages สร้าง messagesent.md ใส่:

ข้อความง่ายๆ แจ้งว่าส่งสำเร็จ ขยายได้ตามใจชอบ

ประมวลผลฟอร์มเว็บอย่างปลอดภัยด้วย phpPress, goPress, rubyPress และ nodePress ประมวลผลฟอร์มเว็บอย่างปลอดภัยด้วย phpPress, goPress, rubyPress และ nodePress ประมวลผลฟอร์มเว็บอย่างปลอดภัยด้วย phpPress, goPress, rubyPress และ nodePress
หน้ายืนยันส่งข้อความสำเร็จ

ประมวลผลฟอร์มด้วย goPress

เพื่อทำความสะอาดข้อความจากผู้ใช้ ใช้ไลบรารี Blue Monday ติดตั้งด้วยคำสั่ง:

นี่คือไลบรารี non-standard 唯一ที่ต้องการ

เปิด goPressServer.go เพิ่มใน import ():

หลังบรรทัด goPress.DefaultRoutes( เพิ่ม:

ตั้งค่า post route /api/message ให้รันฟังก์ชัน postMessage() ที่ท้ายไฟล์เพิ่ม:

ฟังก์ชันสองตัวนี้จัดการส่งอีเมลจากเบราว์เซอร์ Route /api/message เรียก postMessage() ดึงข้อมูลจากฟอร์ม sanitize ด้วย BlueMonday ส่งอีเมลให้เจ้าของเว็บด้วย sendEmail() แทนที่ <your email address> และ <password> ด้วยของคุณ

ใน goPress.go เพิ่มฟังก์ชันหลัง SetGetRoute():

เหมือน SetGetRoute() แตกต่างแค่ใช้ web.Post() ตอนนี้ goPress ส่งอีเมลจากผู้ใช้ได้แล้ว

ประมวลผลฟอร์มด้วย nodePress

ส่งอีเมลจาก Node ต้องติดตั้ง nodemailer และ body-parser:

ที่บน nodePress.js หลังโหลดไลบรารีล่าสุด เพิ่ม:

โหลด nodemailer และตั้งค่า reusable component ส่งอีเมล แทนที่ <your email name> (ชื่อก่อน @), <your email domain> (โดเมน เช่น gmail.com), <your password> (รหัสผ่าน)

หลัง init nodePress variable เพิ่ม:

หลัง nodePress.get() ตัวสุดท้าย เพิ่ม:

Handler สำหรับ /api/message ดึงข้อมูลจากฟอร์ม สร้างอีเมล ส่งไป <your email address> แล้ว redirect ไป /messagesent body-parser เก็บ URL parameters ไว้ใน request.body พร้อม sanitized แล้ว

โค้ดนี้ทำงานกับ Gmail ไม่มี two-factor authentication ถ้ามี 2FA อ่าน docs ของ Nodemailer

ประมวลผลฟอร์มด้วย rubyPress

ส่งอีเมลใน Ruby ต้องติดตั้ง ruby-gmail:

อาจต้อง sudo ขึ้นอยู่กับ setup Ruby ที่บน rubyPress.rb เพิ่ม:

หลัง get definitions ทั้งหมด เพิ่ม:

เพิ่มแล้ว rubyPress ประมวลผลฟอร์มอีเมลได้ แค่เปลี่ยน <your email address> และ <your password> ให้ตรงกับอีเมลเซิร์ฟเวอร์ของคุณ

ประมวลผลฟอร์มด้วย phpPress

เซิร์ฟเวอร์สุดท้ายคือ phpPress ติดตั้ง phpmailer — ไลบรารี PHP ยอดนิยมสำหรับอีเมล ในไดเรกทอรี phpPress รัน:

เสียดาย composer update จะอัปเดต LightnCandy เร็วกว่าและง่ายกว่า แต่ทำให้โค้ดเซิร์ฟเวอร์พัง ใน index.php หา ProcessPage() แทนที่ด้วย:

เปรียบเทียบกับโค้ดเก่า ไม่ต้องใช้ temporary file ทำใน memory เร็วกว่ามาก ที่บน index.php หลัง Jade library เพิ่ม:

โหลด phpmailer หลัง $app->get() ตัวสุดท้าย เพิ่ม:

Post request handler สำหรับ /api/message ดึงข้อมูลฟอร์ม สร้างอีเมล ส่ง PHP ใส่ URL parameters ใน global array $_POST อัตโนมัติ

แทนที่ <your email address>, <your password>, <your name> ให้ตรงกับอีเมลของคุณ ถ้าไม่ใช่ Gmail SMTP เปลี่ยน $mail->Host ตามนั้น

สรุป

ผมแสดงวิธีเพิ่มฟอร์มอีเมลไปยัง pressCMS อย่างง่าย ไฟล์ดาวน์โหลดมีเซิร์ฟเวอร์ทั้งหมดพร้อมแก้ไขแล้ว ดาวน์โหลดไปเลยแทนการพิมพ์ ผมทำ error handling นิดหน่อย ส่วนที่เหลือเป็นการบ้าน

วิธีนี้ส่งข้อมูลฟอร์มผ่าน URL (query string) เว็บสมัยใหม่มักใช้ REST API พร้อม JSON ใน body แทน โร틴เหล่านี้ปรับใช้ได้ง่าย แต่เป็นการบ้าน (หรือ tutorial หน้า) ตอนนี้คุณรู้วิธีนี้แล้ว ลองเพิ่มฟอร์มของตัวเองไป การปรับแต่งแบบนี้สนุกมาก ขีดจำกัดคือจินตนาการของคุณ