קישור בין פניית סוקט לפניית API (socket io).
-
@davidnead אין לי שום מידע על זה, רק מציע לינק
https://stackoverflow.com/questions/4641053/socket-io-and-session -
@dovid אמר בקישור בין פניית סוקט לפניית API (socket io).:
@davidnead אין לי שום מידע על זה, רק מציע לינק
https://stackoverflow.com/questions/4641053/socket-io-and-sessionתודה. לא התעמקתי, אך לפי התאריכים והתוכן עושה רושם שזה מיושן מכדי להיות רלוונטי.
איזה גוגל הוביל אותך לשם?מ"מ זה נותן כיוון שיש אפשרויות לעשות את זה בצורה מובנית יותר, ונכתבו עבור זה ספריות. צריך כנראה לחפש אחת טובה ועדכנית.
-
@davidnead אמר בקישור בין פניית סוקט לפניית API (socket io).:
תודה. לא התעמקתי, אך לפי התאריכים והתוכן עושה רושם שזה מיושן מכדי להיות רלוונטי.
יש שמה תשובה מלפני כמה ימים...
בכל מקרה יש שמה דוגמת קוד של גישה לאובייקט החביב request המוכר לך מכל בקשה, בעת אירוע connection של סוקט. -
@dovid אמר בקישור בין פניית סוקט לפניית API (socket io).:
@davidnead אמר בקישור בין פניית סוקט לפניית API (socket io).:
תודה. לא התעמקתי, אך לפי התאריכים והתוכן עושה רושם שזה מיושן מכדי להיות רלוונטי.
יש שמה תשובה מלפני כמה ימים...
בכל מקרה יש שמה דוגמת קוד של גישה לאובייקט החביב request המוכר לך מכל בקשה, בעת אירוע connection של סוקט.צודק, פספסתי את התשובה הזו. בדר"כ אני מקדיש פחות תשומת לב לתשובות התחתונות, בפרט אחרי שעברתי על שאר התוכן בשרשור והוא כ"כ מיושן.
באמת נראה שזה הפתרון שחיפשתי. מענין, לא ידעתי בכלל שלsocket io יש middlewares.
תודה -
@dovid אמר בקישור בין פניית סוקט לפניית API (socket io).:
@davidnead אתה תמוה, יש בלינק שהבאתי לך שלל של תשובות.
מהתחלה התפלאתי שדחית את מה שיש שמה בגלל היושן, כי כמעט שלא השתנו דברים.
איך האימות שלך עובד? אתה משתמש בsession.js? passport? או אולי jwt?אני לא יודע איזו תשובה רלוונטית שם פספסתי. אולי האנגלית שלי בעוכרי או משהו אחר.
לגבי האימות - הוא jwt, אך למה זה רלוונטי? בסוקט בינתיים טרם עשיתי בכלל אימות.
לגבי הבעיה - הצלחתי לעדכן את הגרסה של הsocket io, עד עכשיו לא עדכנתי אותה בגלל בעיות תאימות לגרסת הקליינט, שבה אני תלוי בגלל VUE, ואידך דומינו זיל גמור.
הצלחתי להתגבר על זה, אבל לא נראה שיש לזה קשר. גם אחרי השדרוג הקוד המתואר שם שהוא פשוט העתק מהתיעוד הרשמי טרם עושה לי את העבודה. או שאולי לא הבנתי איך להשתמש בו.
אני לא רואה שם שום פירוט איך לגשת מתוך הreq של אקספרס אל הסוקט הספציפי של הקליינט, הניחושים שלי כנראה לא הצליחו, וכל מה שחרשתי בגוגל מביא תוצאה דומה.--תיקון--
לא שהתשובות שם לא רלוונטיות, אלא שכל אחת שם פחות טובה מסיבה אחרת. אחת היא קוד מיושן ונסמכת על ספריות מיושנות, אחת נסמכת על התאמה בקליינט. הם יותר הכונה של לקחת את העיקרון של ליצור קוקי ולשמור את הID שלו ולפי זה לגשת למערך הסוקטים. שאני צריך לקחת את הקוד ולעשות התאמות לממש לבד. כשהתחלתי נתקלתי כל פעם בבעיה אחרת, וחשבתי שאם יש ספריה מוכנה ממש לצורך זה מוטב וחכם יותר להשתמש בה, כי יש לא מעט בעיות שמימוש לא יסודי עלול ליצור במצבים מסוימים (כמו פרוקסי ועוד). וכאן נתקעתי, בהפעלת המוצר הנפלא המוכן. -
@davidnead אמר בקישור בין פניית סוקט לפניית API (socket io).:
אני לא רואה שם שום פירוט איך לגשת מתוך הreq של אקספרס אל הסוקט הספציפי של הקליינט, הניחושים שלי כנראה לא הצליחו, וכל מה שחרשתי בגוגל מביא תוצאה דומה.
לא הבנת את כיוון הפתרון. מתי שנוצר סוקט, אתה שומר אותו, נכון? אז בשלב הזה אתה צריך מיפוי בין הזיהוי שלך (במקרה שלך מדובר בJWT) לבין הסוקט, Map כל שהוא כזה:
const mapUserToSocket = new Map(); io.on('connection', function(socket_client) { mapUserToSocket.set(currentUser, socket_client); //bla bla });
אח"כ אתה יכול לעשות mapUserToSocket.get מכל בקשת API למצוא את הסוקט המבוקש.
אלא מה? השאלה היא איך מגיעים לcurrentUser ועל זה ורק על זה הבאתי לך את הלינק. אני לא ידעתי שאתה משתמש בjwt אבל הבאתי לך איך מוצאים את פרטי הבקשה מתוך התחברות הסוקט.עריכה אתה אומר שלא רלוונטי איך אתה מאמת כי עוד לא עשית אימות, ובכן בלי אימות אין דרך תיאורטית בעולם לקשר ביניהם, כלומר לא השאלה איזה קוד אלא פשוט גם המחשב לא יכול לדעת בחיים שסוקט מסויים יצא מאותו טאב של בקשה אחרת. אז דבר ראשון תתמקד באימות הסוקט (אולי תשתמש בזה https://www.npmjs.com/package/socketio-jwt).
אחת היא קוד מיושן ונסמכת על ספריות מיושנות
אין שמה קוד מיושן וספריות מיושנות, יש שמה אולי ספריות שאתה לא משתמש איתם.
-
@dovid אמר בקישור בין פניית סוקט לפניית API (socket io).:
אח"כ אתה יכול לעשות mapUserToSocket.get מכל בקשת API למצוא את הסוקט המבוקש.
אלא מה? השאלה היא איך מגיעים לcurrentUser ועל זה ורק על זה הבאתי לך את הלינק. אני לא ידעתי שאתה משתמש בjwt אבל הבאתי לך איך מוצאים את פרטי הבקשה מתוך התחברות הסוקט.איכפת לך להצביע לי על מה ספציפית התכוונת בלינק? כי אני רואה שם רק דברים על דרך הקוקיס כדלהלן, או דברים מבוססי session שלא בדיוק הבנתי מה זה עושה, וזה כולל גם את הספריה מהתשובה המעודכנת, עשה לי רושם שזה גם עובד עם קוקיס רק של הסשן.
עריכה אתה אומר שלא רלוונטי איך אתה מאמת כי עוד לא עשית אימות, ובכן בלי אימות אין דרך תיאורטית בעולם לקשר ביניהם, כלומר לא השאלה איזה קוד אלא פשוט גם המחשב לא יכול לדעת בחיים שסוקט מסויים יצא מאותו טאב של בקשה אחרת. אז דבר ראשון תתמקד באימות הסוקט (אולי תשתמש בזה https://www.npmjs.com/package/socketio-jwt).
אני הבנתי שהדרך שמציעה הספריה וגם הקודים השונים מבוססת על קוקיס. ליצור קוקי שישלח ממילא גם עם בקשת הסוקט וגם עם בקשת הAPI, וזה מה שממפה ביניהם. אין קשר לאימות.
אם יש לי אימות גם בסוקט - אני לא צריך כלום, אני מקשר את הסוקט לפי הטוקנים וחסל הסיפור. רק שמבחינתי אין לי צורך באימות בסוקט ולא רציתי להכניס אותו רק למטרה הזו. רציתי לבחון את האפשרויות האחרות.
-
@davidnead
אתה צודק שלא צריך לקרוא לזה אימות, פשוט אני רגיל במערכות שלי שעוגיות זה רק עם אימות. אני לא עושה שימוש אחר בעוגיות.
מה שאמרתי בשורה התחתונה אם נתעלם מהמילה "אימות", זה שבארכיטקטורת HTTP, הדרך היחידה לזהות מקור משותף לבקשות היא ע"י פיסת מידע עקבית שהקליינט שולח. זה יכול להיות עוגיה שזה די אוטומטי, וזה יכול משהו שרירותי שנשלח במיוחד כמו הJWT.
הייתי מצפה ממך לתקן אותי על טעות הלשון רק אחרי שתודה לי על כך שהארתי את עיניך שאין "אפשרויות אחרות" לבחון. -
@dovid אמר בקישור בין פניית סוקט לפניית API (socket io).:
@davidnead
אתה צודק שלא צריך לקרוא לזה אימות, פשוט אני רגיל במערכות שלי שעוגיות זה רק עם אימות. אני לא עושה שימוש אחר בעוגיות.
מה שאמרתי בשורה התחתונה אם נתעלם מהמילה "אימות", זה שבארכיטקטורת HTTP, הדרך היחידה לזהות מקור משותף לבקשות היא ע"י פיסת מידע עקבית שהקליינט שולח. זה יכול להיות עוגיה שזה די אוטומטי, וזה יכול משהו שרירותי שנשלח במיוחד כמו הJWT.
הייתי מצפה ממך לתקן אותי על טעות הלשון רק אחרי שתודה לי על כך שהארתי את עיניך שאין "אפשרויות אחרות" לבחון.אני מודה לך מאוד שהארת את עיני, הנחתך כי התכונתי לתקן אותך על טעות לשונית היא שגויה. אני בדרך כלל נוטה ליחס לעצמי את הטעות כשאיני מבין אותך, כך שרק כעת אני מבין את כונתך הלשונית.