سلام و عرض ادب
بنده کدهای Pasport را دقیقا مثل همان چیزی که شما فرمودید نوشتم ولی هنگام نوشتن یوزر و پسورد خطایMissing credentials را میده. لطفا راهنمایی فرمایید.
userController:
const bcrypt = require("bcryptjs");
const passport = require("passport");
const User = require("../models/User");
exports.login = (req, res) => {
res.render("login", {
pageTitle: "ورود به بخش مدیریت",
path: "/login",
message: req.flash("success_msg"),
error: req.flash("error"),
});
};
exports.handleLogin = (req, res, next) => {
passport.authenticate("local", {
successRedirect: "/dashboard",
failureRedirect: "/users/login",
failureFlash: true,
// badRequestMessage : "وارد کردن فیلد ها الزامی میباشد"
})(req, res, next);
};
exports.register = (req, res) => {
res.render("register", {
pageTitle: "ثبت نام کاربر جدید",
path: "/register"
});
};
exports.registerPost = async (req, res) => {
const errors = [];
try {
await User.userValidation(req.body);
const { fName, lName, Email, Password, mobile } = req.body;
const user = await User.findOne({ Email });
if (user) {
errors.push({ message: "کاربری با این ایمیل موجود است" });
return res.render("register", {
pageTitle: "ثبت نام کاربر جدید",
path: "/register",
errors,
});
}
const hash = await bcrypt.hash(Password, 10);
await User.create({
fName,
lName,
Email,
Password: hash,
mobile,
});
req.flash("success_msg", "ثبت نام موفقیت آمیز بود");
res.redirect("/users/login");
} catch (err) {
console.log(err);
err.inner.forEach((e) => {
errors.push({
name: e.path,
message: e.message,
});
});
return res.render("register", {
pageTitle: "ثبت نام کاربر جدید",
path: "/register",
errors,
});
}
};
passport.js
const passport = require("passport");
const { Strategy } = require("passport-local");
const bcrypt = require("bcryptjs");
const User = require("../models/User");
passport.use(
new Strategy({ usernameField: "Email" }, async (Email, password, done) => {
try {
const user = await User.findOne({ Email });
if (!user) {
return done(null, false, { message: "کاربری با این ایمیل ثبت نشده" });
}
const isMatch = await bcrypt.compare(password, user.password);
if (isMatch) {
return done(null, user); //req.user
} else {
return done(null, false, {
message: "نام کاربری یا کلمه عبور صحیح نمی باشد",
});
}
} catch (err) {
console.log(err);
}
})
);
passport.serializeUser((user, done) => {
done(null, user);
});
passport.deserializeUser((id, done) => {
User.findById(id, (err, user) => {
done(err, user);
});
});
ضمنا استاد با چه روشی میتونم باهاتون در ارتباط باشم؟ توی اینستاگرام پیام دادم ندیدید
سلام دوست من
تمامیه نام دهی هایی که در فرانت برای input ها در نظر گرفتی به lowercase تبدیل کن مثلا اومدی Password ذخیره کردی ولی در پیکربندی پاسپورت گفتی با User.passoword مقایسه بشه.
بهترین روش نوشتن تمامیه کلید ها به صورت lowercase یا حروف کوچک هست هم نام دهی به input و هم ذخیره در پایگاه داده.
تنها راه دسترسی به من در همین بخش پرسش و پاسخ هست چون زیاد وارد اینستاگرام نمیشم و نمیتونم در اینستاگرام به سوالات هزار نفر یکجا جواب بدم .
موفق باشید
ممنون از لطف شما. این کار را هم انجام دادم ولی همچنان مشکل هست و همین خطا را میده.
در مورد دوم هم برای کلاس خصوصی خدمتتان پیام دادم. سوالات را همینجا می پرسم از خدمتتان
تمامی inputها و نام ها را در فرانت و back و دیتابیس lowercase گذاشتم ولی تغییری نمی کند.
مشکل در همین ارسال اطلاعات باید باشه
میتونی پروژه رو جایی آپلود کنی و برام اینجا قرار بدی تا چک کن ببینم مشکل از کجاست
متاسفانه من کلاس خصوصی قبول نمیکنم چون خیلی سرم شلوغه و درگیر دوره ها هستم.