אל תשמור סיסמאות ב DB זה גם לא חוקי ועלול לחשוף אותך לתביעות אם המידע יזלוג החוצה, וגם בגלל האחריות כלפי הקליינט שמפקיד את הסיסמה שלו אצלך והוא לא היה רוצה שכל מי שיש לו גישה לשרת יראה את הסיסמה שלו. יש מחלקות בנוד שמגבבות סיסמאות, יש כאן כמה מדריכים לעבוד עם סיסמאות
https://video-tov.ml/?tag=Passport.js&page=1
יוסף בן שמעון
-
authentication ב - express -
authentication ב - expressאתה צריך ליצור טבלה של יוזרים עם שם מייל סיסמה הרשאות ושאר ירקות, ובעמוד של login להגדיר בשביל פספורט את הפונקציה שמקבלת את המידע של ה login ובודקת אותו עם הטבלה של היוזרים, ולהגדיר ג"כ מה קורה במקרה של הצלחה וכישלון של login, ופה בערך מסתיים התפקיד שלך, אם הכניסה הצליחה פספורט שומר את זה בטבלה של הסשנים, ובכל בקשה של הקליינט אתה יכול לגשת לנתונים של הקליינט באובייקט req, משהו כזה:
req.session.passport.user.name
-
authentication ב - expressאין לי ניסיון ברדיס, אבל אני לא מבין למה צריך לשמור סשנים בזיכרון חי, זה מועד לפורענות של דליפת זיכרון, ואם אתה מאתחל את המכונה כל הסשנים נמחקים והקליינט לא מבין למה הוא צריך להכניס עוד פעם סיסמה אחרי שכבר הכניס לפני שעתיים.
אקספרס סשנ'ס יודע לעבוד עם הרבה סוגי DB, אתה לא צריך לייחד DB מיוחד עבור הסשנים, רק תגדיר לו את הגדרות החיבור לDB הכללי והוא כבר ידאג ליצור טבלה וכל מה שצריך -
authentication ב - express@מנצפך אמר בauthentication ב - express:
לפרספורט אין מערכת סשנים עצמית, הוא צריך מערכת שדואגת לשמור את הסשנים, ובשלב האימות צריך לשלוף את מזהה הסשן, אתה צריך גם express-session וגם passport
-
תשלום לסוכן על סיםמכר שלי נכנס לחנות סלולר וביקש קו של פלאפון, המוכר נתן לו סים ואמר לו להתקשר אליו מחר כדי לפתוח את הקו. בסוף הוא התחרט ונשאר עם הסים בידו בלי לשלם כלום. עכשיו הוא נבוך בקשר לתשלום על הסים, כי נדמה לו שהמוכר אמר לו שעל כל סים משלמים 30 ש"ח. והוא רוצה לדעת האם עליו לחזור למוכר לשלם על הסים.
אשמח אם יש למישהו מידע בנושא, האם באמת גובים על הסים כסף או רק על החיבור והמספר הסלולרי, ומי אמור לקבל את הכסף הזה, האם זה דיביננד של הסוכנים או תשלום לחברה
תודה מראש -
שאלות מתקדמות ב nodejsשאלה ב: כן, הדרך הנכונה היא לעשות ריסטרט.
שאלה ג: זה בהחלט דרך נכונה, אם כי זה יכול לגרום לדליפת זיכרון אם אתה מכביד מידי על הזיכרון, אבל זה רחוק שזה יגיע למצב כזה, תקפיד לנקות את הזיכרון אחרי שהשיחה מסתיימת ולא אמורה להיות בעיה
שאלה א: זה לא שאלה של node אלא שאלה כללית בארכיטרקטורה, קשה לענות עליה בצורה מדוייקת בלי להכיר את האיפיון של המערכת שלך, בגדול אם זה נתונים דינמיים שמשתנים בתדירות כדאי לך לשקול עבודה עם מסד נתונים, ולכתוב את הקוד בצורה כזו שהפונקציות יהיו גנריות וישלפו את הנתונים הרלוונטיים כל פעם, כך לא תצטרך עדכון תדירי בקוד.
לא בטוח שזה מתאים לך, עכ"פ לא בשלב הזה, ואתה כן תצטרך לעשות את זה בתוך הקוד, ככל שאתה ממעט באפליקציות אתה מרוויח חסכון במשאבים וניהול נכון יותר של השרת, בקשר לאורך של הקוד צריך ללמוד איך עושים את זה נכון, לכתוב קוד מסודר ונקי זה דבר נרכש.
בכל אופו לפני כל עדכון תבדוק אותו בארגז חול במחשב שלך או על השרת בתהליך נפרד, ואחרי שאתה מדבג ורואה שכל הפונקציות עובדות ואין שגיאות תוכל להעלות אותו לאויר. -
שאלות של מתחיל - מקצועי ב nodejs@חוקר עכשיו נפל לי האסימון (במסגרת 17 ההודעות שנותרו לאשכול...) כשאתה קורא ל
res.end
אתה אמור לעצור את הריצה של הפונקציה, היא לא אמורה להמשיך לרוץ, אתה צריך לכתוב כךif (!campaign_id || campaign_id === ''){ return res.end("id_list_message=" + 't-לא הוגדר מספר קמפיין, לא ניתן לבצע פעולה זו.' + '&' + "go_to_folder=/" + 'hangup'); }else{ if (!campaigns_data[campaign_id]){ return res.end("id_list_message=" + 't-קמפיין לא מורשה במערכת, לא ניתן לבצע פעולה זו.' + '&' + "go_to_folder=/" + 'hangup'); } else{ campaign_stats = campaigns_data[campaign_id]; } } var total = campaign_stats.data.total;
-
שאלות של מתחיל - מקצועי ב nodejsאולי תפתח אשכול חדש לכל נושא, זה מכביד 3 עמודים לנושא אחד...
-
שאלות של מתחיל - מקצועי ב nodejs@חוקר זה לא קשור לאיך נוד קורא את הדף, זה פשוט משתנה שמעולם לא אותחל אז הוא undefind, אתה יכול לכתוב כך:
var total = (campaign_stats && campaign_stats.data.total);
זה יבדוק אם המשתנה קיים ואם לא הוא יחזיר מיד את הundifind ולא יכשיל את הפונקציה
-
שאלות של מתחיל - מקצועי ב nodejs@חוקר כלומר אתה מבצע שתי התקשרויות לצ'רדי עבור כל בקשה, אחת כדי לקבל מידע אישי ואחת בשביל מידע כללי נכון? אם כן, את המידע האישי לא תוכל לחסוך ותצטרך להמשיך לעשות אותו עבור כל בקשה, וכשהוא יבקש מידע כללי תוכל לתת לו את הנתון ששמרת בזיכרון.
השאלה היא האם אתה צריך לשלוח 15 בקשות כל שתי שניות ולשמור 15 משתנים, זה נראה לי קצת מוגזם, יבואו המומחים ויגידו אם ה נכון לעבוד כך או עדיף לעשות את זה רק כשהקליינט מבקש -
שאלות של מתחיל - מקצועי ב nodejs@חוקר תפרט קצת, מה הקליינט אמור לקבל, מידע אישי שלו או מידע כללי לכל הקמפיין? יש הרבה קמפיינים באויר או כמה אחדים? באיזו צורה הוא מזדהה, עם פרמטר ב GET או עוגיות?
-
שאלות של מתחיל - מקצועי ב nodejs@חוקר אמר בשאלות של מתחיל - מקצועי ב nodejs:
@אהרן אמר בשאלות של מתחיל - מקצועי ב nodejs:
לעצם הענין setIntervalמפעיל פונקציה שמעבירים אליו כארגומנט, בכל פרק זמן. בדוגמא כאן אתה יכול לראות ש setInterval קיבל 2 ארגומנטים 1 פונקציה 2 ערך 2000 שהוא ההפרש בין הפעלה להפעלה. במקרה הזה הפונקציה (ארגומנט 1) יופעל בכל 2000 מילי סקנד.
תן לי להבין דקה מה הולך פה.
אני הרי לא צריך שתהליך הבדיקה יופעל כל הזמן אלא בכל פעם שניגשים לכתובת ולפורט זה.
או אולי הבנתי נכון שבעצם התהליך כאן יתרחש בכל מקרה כל 2 שניות, ומאידך גיסה התהליך הזה מתרחש כל שני שניות וכל הבקשות הנוכחיות ימתינו עד לפעם הבא שהתהליך יתרחש (כל 2 שניות) וכולם מקבלים יחד את אותה התשובה , משהו כזה.
לפי הדוגמה כאן וההסבר שנתת לי, מה הולך כאן זה תהליך שחוזר על עצמו כל הזמן?
אני שואל שאלות עמרציות, אבל לא הביישן למד..
תודהכל שתי שניות אתה מתעדכן מול צ'רדי בלי קשר לבקשות, ואתה שומר את המידע בזכרון (אחד המעלות הגדולות של נוד מול PHP!) וכשהקלינט שולח בקשה אתה שולף לו מיד מהזכרון את המידע האחרון שקיבלת מצ'רדי, כך הוא לא צריך להמתין למידע, והוא מקבל נתון שנכון לשתי שניות האחרונות
-
שאלות של מתחיל - מקצועי ב nodejs@yossiz אמר בשאלות של מתחיל - מקצועי ב nodejs:
@חוקר אמר בשאלות של מתחיל - מקצועי ב nodejs:
מה היא הדרך הכי טובה להפעיל את השרת ע"י SSH שהתהליך לא יסתיים לאחר סגירת החלון, ומצד שני שניתן יהיה כל הזמן לעדכן ולהריץ שינויים?
התשובה הנכונה לזה הוא להשתמש ב-tmux. גם c9 משתמש ב-tmux.
sudo apt install tmux tmux ... #תריץ תהליכים #יציאה ... #כניסה מחדש tmux attach #התהליכים עדיין רצים (לא ברקע אלא מקדימה)
לא מכיר, אבל זה נראה משהו בסגנון screen, אם כן זה לא הדרך הכי טובה, כי אם יש שגיאה והאפליקציה קורסת אין מי שיודיע לך על זה ויפעיל אותה מחדש. הדרך הטובה ביותר היא להריץ אותה עם סרביס דוגמת PM2 שהציע קליאון
-
api ווקומורס carthttps://stackoverflow.com/questions/38546354/woocommerce-cookies-and-sessions-get-the-current-products-in-cart
יש פה תיאור איך ווקומרס שומר את המוצרים בדאטבייס, אולי זה יקדם אותך במשהו -
דחוף מאוד - מסגרת לכרזה גדולה@הבוס-הגדול אמר בדחוף מאוד - מסגרת לכרזה גדולה:
עבר כמה ימים ולא אישרו לי את הניק שלי.
אפשר לקבל פרטים ליצירת קשר שם?אולי היוזר שבחרת לא עומד בקריטריונים שם, תנסה שם אחר
-
api ווקומורס cart@chagold אמר בapi ווקומורס cart:
ווקומרס נותן לכל משתמש מזהה סשן שמאוחסן בדאטבייס, ואת המזהה הזה הוא שולח לקליינט לשמור בעוגיות, והמוצרים שהוא בחר שמורים בדאטבייס לפי הסשן.
לכאורה אתה צריך ללמוד את ההתנהגות שלו איפה הוא שומר את המוצרים ואיך הוא מעדכן את הרשומה לפי הסשן, אני לא בטוח שהוא מעדכן את הקוקיס אצל הקליינט נראה לי שהוא מעדכן רק בשרת.
אני כותב מזכרון מלפני הרבה זמן תבדוק את הרלוונטיות של הדברים. -
שאלות של מתחיל - מקצועי ב nodejs@חוקר אמר בשאלות של מתחיל - מקצועי ב nodejs:
@יוסף-בן-שמעון
תודה.
השאלה היא האם שייך כן לארוז את זה כפונקציה, כי אני רוצה לקבל json ולטפל אותו לנתח נתונים לתוך משתנים ועוד.
אני צריך אפשרות לקבל בסגנון שכתבתי בהתחלה.
יש מצב?
תודהאתה יכול במקום לכתוב
res.text()
להחליף ל
res.json()
ואז בפונקציה השניה אתה מקבל את הbody כ JSON
אגב יש מודול יותר פופולרי לבקשות משרתים מרוחקים, קוראים לו request, אתה יכול להתקין כךnpm i request
ולהשתמש כך:
var request = require('request'); app.get('/page', (req, res)=>{ request('https://github.com/', (err, response, body)=>{ body = JSON.parse(body); if(body.status == "ok") res.send("ok") else res.send("no") }) })
-
שאלות של מתחיל - מקצועי ב nodejs@חוקר אמר בשאלות של מתחיל - מקצועי ב nodejs:
@יוסף-בן-שמעון אמר בשאלות של מתחיל - מקצועי ב nodejs:
הפתרון היא לעבוד עם callback או עם promise, לדוגמא במודול שאתה משתמש יש פרומיס מובנה
מה זה פרומיס?
-
שאלות של מתחיל - מקצועי ב nodejs@חוקר אמר בשאלות של מתחיל - מקצועי ב nodejs:
נוד היא סינכרונית, כלומר כשאתה שולח בקשה לשרת מרוחק המעבד ממתין לתשובה, בנתיים הקומפיילר לא מחכה אלא ממשיך לשורה הבאה, ועד שהתשובה מגיעה הוא כבר אוחז כמה שורות אח"כ ולכן הוא לא טוען את התשובה למשתנה.
הפתרון היא לעבוד עם callback או עם promise, לדוגמא במודול שאתה משתמש יש פרומיס מובנה, תראה כאן:
https://www.npmjs.com/package/node-fetch#plain-text-or-htmlfetch('https://github.com/') .then(res => res.text()) .then(body => console.log(body));
then הראשון ממיר את התשובה מאובייקט לטקסט, ומחזיר אותו ל then השני, ובשני אתה יכול לשלוח את התשובה לאיפה שאתה רוצה. משהו כזה:
app.get('/page', (req, res)=>{ fetch('https://github.com/') .then(response => response.text()) .then(body =>{ if (body = "ok"){ res.end(body); } else{ res.end("no"); } }); })```