با سلام و خسته نباشید
من یک مشکل در بخش سشن ها دارم که میخوام با دستور req.session.example مقداری رو در سشن ذخیره میکنم و در جای دیگری بهش دسترسی داشت باشم
من برای اینکه بررسی کنم که کاربر وارد شده به حساب هست یا نه یک مقدار token رو در سشن req.session.token ذخیره میکنم، حالا توی یک از روت هام میخوام بررسی کنم که اگر این سشن تنظیم شده به کاربر اجازه ورود به اون روت رو بده و در غیر این صورت یک ارور بهش نمایش بده که ابتدا وارد حساب شوید
این موضوع روی لوکال مشکلی نداره و بعد از وارد شدن به حساب از طریق صفحه ورود و بعد صدا زدن اون روت بدون مشکل وارد روت میشم ولی وقتی میرم روی سرور آنلاین به مشکل میخورم و سشن رو پیدا نمیکنه در نتیجه اجازه ورود به اون روت رو نمیده و ارور ابتدا وارد حساب شوید رو نمایش میده!! تو نت سرچ زدم و به req.session.save() رسیدم و تست کردم ولی نتیجه تغییری نکرد و همچنان به من اجازه وارد شدن به اون روت رو نمیده! وقتی هم که میگم req.session.token رو چاپ کنه نتیجه ای نداره و مقدار خالی رو چاپ میکنه
اگر تاثیری در جواب داره سرور آنلاینم گواهی SSL نداره و به واسطه HTTP لود و کار میکنه نه HTTPS (هرچند که تمامی بخش ها بدون مشکل کار میکنند و تنها مشکل موجود مورد اشاره شده است)
@ali.bayat @hesammousavi @mhyeganeh
کد تنظیمات express-session در فایل app.js
// create and save session in DB
let sess = {
store: new MongoStore({
mongooseConnection: mongoose.connection,
ttl: 24 * 60 * 60 // session expiration = 1 day
}),
resave: false,
saveUninitialized: true,
secret: config.sessSalt,
cookie: {
maxAge: 1000 * 60 * 60 * 24
}
}
if (app.get('env') === 'production') {
app.set('trust proxy', 1) // trust first proxy
sess.cookie.secure = true // serve secure cookies
}
app.use(session(sess))
کد ذخیره سازی session در روت post ورود
if (!status) {
return res.status(422).json({
massage: 'رمز عبور اشتباه است',
password: false,
success: false
});
} else {
// get user basic info from user transfer
let userData = new UserTransform().transform(result, true);
// save user api token in a session
req.session.token = userData.token;
req.session.save()
// return user's basic information
return res.json({
massage: 'شما با موفقیت وارد شدید',
data: userData,
session: req.session,
success: true
});
}
کد درخواست بررسی وجود session
let token = req.session.token ;
if (token) {
...
}
return res.status(422).json('ابتدا وارد حساب کاربری شوید')
درخواست چاپ req.session.tokrn و req.session
return res.json({
massage: token,
session: req.session,
success: true
})
نتیجه چاپ شده
{
"session":{"cookie":{"originalMaxAge":86400000,"expires":"2021-02-15T09:34:25.658Z","secure":true,"httpOnly":true,"path":"/"}},
"success":true
}
ممنون میشم راهنمایی بفرماید
مشکل حل شد
مشکل به علت استفاده همزمان از کوکی و سشن بود برای رفع مشکل باید بخش های مربوط به کوکی از کد تنظیمات express-session در فایل app.js حذف میشدند
کد نهایی تنظیمات
// create and save session in DB
const sess = {
store: new MongoStore({
mongooseConnection: mongoose.connection,
ttl: 24 * 60 * 60 // session expiration = 1 day
}),
secret: config.sessSalt,
resave: false,
saveUninitialized: false
}
if (app.get('env') === 'production') {
app.set('trust proxy', 1) // trust first proxy
}
app.use(session(sess))
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟