ปัญหาการเขียนสคริปต์ข้ามไซต์
คุณไม่สามารถถ่ายโอน WP auth cookies ระหว่างโดเมน คุณไม่ต้องการเก็บรหัสผ่านแบบธรรมดาสำหรับการเข้าสู่การติดตั้ง WP อื่นโดยทางโปรแกรม ดังนั้นคุณจะต้องให้ผู้ใช้เข้าสู่ระบบ WordPress แล้วเข้าถึงสถานะการเข้าสู่ระบบของพวกเขาผ่านจุดสิ้นสุด API จากเว็บไซต์บุคคลที่สาม ซึ่งช่วยให้ WordPress จัดการกับการรับรองความถูกต้องทั้งหมด มันค่อนข้างปลอดภัยเพราะผู้ใช้จะต้องเข้าสู่ระบบทางด้านร่างกายเพื่อให้ปลายทาง API เพื่อให้บริการข้อมูลแก่บุคคลที่สาม
สร้าง API Endpoint
ลองดูบทความที่ฉันเพิ่งเขียนที่นี่: http://coderrr.com/create-an-api-endpoint-in-wordpress/
นอกจากนี้คุณสามารถดูการสาธิตรหัสได้ที่นี่: https://gist.github.com/2982319
คุณจะต้องคิดหาเหตุผลสำหรับความต้องการแอพของคุณเอง แต่สิ่งนี้จะช่วยให้คุณสร้างจุดปลายที่คุณสามารถให้บริการทุกสิ่งที่คุณต้องการจากด้าน WordPress
เนื่องจากคุณใช้ WordPress เป็นเว็บไซต์รับรองความถูกต้องคุณสามารถใช้เช็คเช่น is_user_logged_in () หากพวกเขาเข้าสู่ระบบกลับวัตถุผู้ใช้ไปยังบุคคลที่สามด้วยข้อมูลใด ๆ ที่พวกเขาต้องการ
เข้าสู่ระบบจากบุคคลที่สาม
จากบุคคลที่สามพวกเขาสามารถเชื่อมโยงไปยังหน้าเข้าสู่ระบบของคุณเพื่อรับประสบการณ์ที่ราบรื่นโดยใช้ redirect_to query var เมื่อลงชื่อเข้าใช้แล้วมันจะส่งพวกเขากลับไปยังเว็บไซต์บุคคลที่สาม
http://sub.yourdomain.com/wp-login.php?redirect_to=http%3A%2F%2Fwww.third-party-domain.com
รีโมตล็อกอิน
หากคุณต้องการเข้าสู่ระบบผู้ใช้ WordPress จากเว็บไซต์บุคคลที่สามคุณสามารถใช้ฟังก์ชั่น WP ง่าย ๆ ที่มีอยู่ในเว็บไซต์นี้: http://kuttler.eu/code/log-in-a-wordpress-user-programmatically/
คุณจะต้องใช้ความลับร่วมกันและสร้างเวลาตามแฮชลับนั้นเพื่อให้สิ่งต่าง ๆ ปลอดภัย โดยทั่วไปนี่คือสิ่งที่ดูเหมือนว่า:
บุคคลที่สามส่งคำขอพร้อมเวลาประทับและโทเค็นที่สร้างขึ้นโดยความลับที่แชร์:
$shared_secret = 'foobar'; //do not send this to the API endpoint
$timestamp = time();
$token = md5($shared_secret.$time_stamp);
การติดตั้ง WordPress ได้รับคำขอ:
$shared_secret = 'foobar';
$timestamp = esc_attr($_GET['timestamp']);
if((time() - $timestamp) > 30) # Threshold is 30 seconds
//do something here - TOKEN expired!
$token = md5($share_secret.$timestamp);
$token_to_check = esc_attr($_GET);
if($token == $token_to_check)
//authenticated!