• 1400/01/20

نحوه احرازحویت کاربرتایید شده بعداز بازگشت ازیک لینک خارجی :

سلام استاد قربانی عزیز وقتتون بخیر:

دارم یه درگاه پرداخت رو شبیه سازی میکنم؛  وقتی کاربر یه محصول رو برای خرید انتخاب میکنه و میره تووی درگاه پرداخت و اونجا کاراشو انجام میده

request({
			method: "POST",
			url: "https://api.idpay.ir/v1.1/payment",
			headers: {
				"Content-Type": "application/json",
				"X-API-KEY": "6a7f99eb-7c20-4412-a972-6dfb7cd253a4",
				"X-SANDBOX": 1,
			},
			body: {
				order_id: uuid(),
				amount: course.price,
				desc: `بابت خرید دوره ${course.title}`,
				callback: "http://localhost:3000/courses/payment",
			},
			json: true,
		})
			.then((data) => {
				return res.redirect(data.link);
			})
			.catch((err) => res.json(["err", err]));

 و وقتی نتیجه میخواد برگرده به سایت پذیرنده، اینجا چون برای routeی میخواد نتیجه کارو تائید کنه 

router.post(
	"/courses/payment",
	ifUserNotAuthenticated,
	courseController.checker
);

یه middleware گذاشتم که کاربرای تائید نشده نتونن بهش دسترسی نداشته باشن

exports.ifUserNotAuthenticated = (req, res, next) => {
	if (req.isAuthenticated()) return next();
	return res.redirect("/auth/login");
};

نمیدونم چرا همین کد برای اون کاربری که محصولی رو پرداخت کرده و میخواد برگرده به سایت پذیرنده یه راست میره تووی صفحه لاگین در حالیکه اون کاربر قبلا احراز هویت شده بود. 

اینم کد احراز هویت:


exports.loginProcess = async (req, res, next) => {
	try {
		await User.userLoginValidation(req.body);

		const json = await recaptcha(req, res, "/auth/login");

		if (json.success) {
			passport.authenticate("local.login", (err, user) => {
				if (err) console.log(err);

				if (!user) return res.redirect("/auth/login");

				req.login(user, (err) => {
					if (err) console.log(err);

					if (req.body.remember) {
						req.session.cookie.originalMaxAge = 1000 * 60 * 60 * 24;
					}
					return res.redirect("/");
				});
			})(req, res, next);
		} else {
			req.flash("msg", {
				type: "danger",
				body: ["اعتبارسنجی کپچا صحیح نمی باشد."],
			});
			return res.redirect("/auth/login");
		}
	} catch (err) {
		req.flash("msg", { type: "danger", body: err.errors });
		return res.redirect("/auth/login");
	}
};

استاد لطفا راهنماییم کنید چطوری اون کاربری که خرید رو انجام داده بصورت احراز هویت شده بره به اون روت تایید کننده یعنی اینجا:

				callback: "http://localhost:3000/courses/payment"

 ممنون

  • 1400/01/22
  • ساعت 15:29

سلام دوست من

توی صفحه لاگین چک کردی اگر احراز هویت شده بود نتونه وارد بشه؟


  • 1400/01/22
  • ساعت 17:58

سلام مجدد استاد

بله یه middleware براش گذاشتم که اگه احراز هویت شده بود نره تووی صفحه لاگین 

exports.userIfAuthenticated = (req, res, next) => {
	if (req.isAuthenticated()) return res.redirect("/");

	next();
};
router.get("/login", userIfAuthenticated , loginController.showLoginForm);

اما استاد مشکل اینجاست که اصلا کاربر احراز هویت شده ایی تووی req.user وجود نداره چون وقتی تووی کنترولری که برای مدیریت اطلاعاتی که از سمت درگاه میاد گذاشتم console.log(req.user) رو میگیرم مینویسه undefined .

یجورایی برام خیلی گیج کننده شده که مگه بین راه چه اتفاقی برای req میوفته که کاربر از داخلش حذف میشه؟؟؟

البته تووی مستندات درگاه پرداخت نوشته اطلاعات رو بصورت POST میفرسته .

نمیدونم شاید اطلاعات دریافتی ازسمت درگاه باعث میشه req بازنویسی بشه !

اکه حدسم درست باشه چطوری باید جلوی بازنویسی شدن req رو بگیرم؟!!

این چالش برام یکم سنگین شده استاد ...


  • 1400/01/23
  • ساعت 13:58

میتونی کاربر رو در localStorage ذخیره کنی و بعد اتمام کار پاکش کنی

منظور بعد از ورود اطلاعاتش در localStorage ذخیره بشه و زمان logout اطلاعاتش رو پاک کنی


logo-samandehi