wordpress rest api authentication
-
אני בונה קריאות עם rest_api_init של וורדפרס, ואני רוצה לתת נתונים אישיים, מה שדורש אותנטיקציה.
בהדרכה הרשמית של וורדרפס כאן ההדרכה היא להזדהות עם nonce, אותו ניתן לשלוף ממשתנה בשם wpApiSettings. שנשמר בצד לקוח.
יש לי 2 בעיות- המשתנה הנ"ל קיים רק כשאני נכנס כמנהל, הוא לא קיים לשאר המשתמשים (וכ"ש לא למי שאינו מחובר).
- בדוקומנטציה הספציפית של WordPress Nonces ההמלצה היא (כאן תחת הכותרת Nonce security). כך הבנתי, לא להסתמך על nonce עבור הזדהות.
להבהרה: אני מבצע את הקריאות בצד לקוח מתוך אתר הוורדרפס, ולמרות זאת חייבים לשלוח איזשהו אלמנט זיהוי, כפי שמוסבר בקישור הראשון לעיל.
השאלה אם כן היא,
מה הדרך הנכונה להזדהות בפני הrest api של וורדפרס?
תודה. -
@shpro654
אני לא קראתי את כל התיעוד של וורדפרס
ראשית המשתנה wpApiSettings לא נמצא באוטומט בכל דף אלא אם כן מישהו שלח אותו לשם.
ואתה גם יכול לקרוא לו בכל שם שתרצה...function addObjectToFrontend(){ wp_localize_script( 'wp-api', 'selectJsObjectName', array( 'root' => esc_url_raw( rest_url() ), 'nonce' => wp_create_nonce( 'wp_rest' ) ) ); } add_action( 'wp_enqueue_scripts', 'addObjectToFrontend' ); //יופיע בפרונט add_action( 'admin_enqueue_scripts', 'addObjectToFrontend' ); //יופיע בדפי הניהול
אבל... למיטב ידיעתי בREST API אין צורך חובה בnonce כמו שיש צורך בadmin_ajax (כלומר מניסיון)
ככל הנראה הוא תהליך פשוט של זיהוי שהגולש מגיע מהאתר ולא מדפים חיצוניים, אם אתה צריך את האימות הזה, אז תעשה אותו.תהליך הזדהות ברמת משתמש הוא פשוט מאוד ע"י כל הפונקציות הרגילות של וורדפרס
ראשית יש לך את שדה function_callback בregister_rest_route שם תוכל לוודא את תפקיד המשתמש או את עצם היותו מחובר או כל דבר אחר ולהחזיר true או falseלווידוא משתמש מחובר (תיעוד)
is_user_logged_in()
קבל את אובייקט המשתמש הנוכחי (תיעוד)
wp_get_current_user()
-
@ש-ב-ח אמר בwordpress rest api authentication:
ואתה גם יכול לקרוא לו בכל שם שתרצה...
אכן עובד, אבל:
הוא מופיע לי רק בדפי הניהול ולא בפרונט.
כיביתי את כל התוספים, עדיין לא מופיע.
יתרה מכך, כיביתי את כל התוספים, ולפתע הוא הפסיק להופיע גם בדפי הניהול, אלא אם כן אני מדליק את התוסף יוסט-seo (מוזר...)@ש-ב-ח אמר בwordpress rest api authentication:
אבל... למיטב ידיעתי בREST API אין צורך חובה בnonce כמו שיש צורך בadmin_ajax (כלומר מניסיון)
ככל הנראה הוא תהליך פשוט של זיהוי שהגולש מגיע מהאתר ולא מדפים חיצוניים, אם אתה צריך את האימות הזה, אז תעשה אותו.ב-REST API הרגיל אכן יש זיהוי מובנה. אבל ב-rest_api_init לא. (wp_get_current_user מחזיר 0)
ולכן צריך את הnonce. -
@shpro654
לא יודע מה לומר לך על העניין של מופיע ולא מופיע, זה לא אמור להיות ככה
תבדוק אם יש איזה קאש.לגבי
@shpro654 אמר בwordpress rest api authentication:ב-REST API הרגיל אכן יש זיהוי מובנה. אבל ב-rest_api_init לא. (wp_get_current_user מחזיר 0)
ולכן צריך את הnonce.אני לא מצליח להבין מה אתה עושה
rest_api_init הוא HOOK שך וורדפרס
שבו נרשמים כל נקודות קצה של הAPI
אין שני סוגי rest api ב wp.
למה זה מחזיר לך 0 לא יודע,
כל האימות של וורדפרס נעשה בעוגיות, האם אתה חוסם את העוגיות בבקשה?
האם אתה מחובר מהקליינט ממנו אתה שולח את הבקשה?ודרך אגב עכשיו קראתי קצת יותר את העמוד שהפנית אליו, ראיתי שהוא כותב בדיוק מה שכתבתי... (ברוך שכיוונתי... )