Hoom@n
10 ماه پیش توسط Hoom@n مطرح شد
2 پاسخ

مشکل ثبت نام کاربر در node.js با mongoose passport local-passport

سلام،
من تازه دوره "ساخت یک وبسایت آموزشی (فروشگاهی) با Nodejs" رو شروع کردم و دارم با جلسات پیش میرم و پروژه اون رو با کمی تغییرات اجرا میکنم. متاسفانه به دلیل اینکه دوره قدیمی هست نسخه استفاده شده برخی پکیج ها ی این دوره منسوخ شدن یا اینکه dependency های اونها منسوخ شدن . من تا جلسه هفتم پیش رفتم و همه مشکلات رو با جستجو حل کردم. اما در بخش ثبت نام کاربر به دلیل تغییرات نسخه های جدید پکیج mongoose به مشکل خوردم و متاسفانه با جستجو در گوگل و استک اورفلو به جوابی نرسیدم که بتونم اون رو درک کنم. خواستم با نسخه mongoose استفاده شده در دوره و چند نسخه بعد از اون پیش برم اما تعداد زیادی از dependency های اونها منسوخ شدن و دیگه قابل نصب نیستن و در نصب ارور های زیادی میدن. گفتم اینجا بپرسم شاید دوستان بتونن من رو راهنمایی کنن

const passport = require('passport')
const localStrategy = require('passport-local').Strategy
const User = require('app/models/user')

passport.serializeUser(function(user, done) {
    done(null, user.id);
});

passport.deserializeUser(function(id, done) {
    User.findById(id, function (err, user) {
        done(err, user);
    });
});

passport.use('local.register' , new localStrategy({
    usernameField : 'email',
    passwordField : 'password',
    passReqToCallback : true
} , (req , email ,  password , done) => {
    console.log(email , password)
    User.findOne({ 'email' : email } , (err , user) => {
        if(err) return done(err);
        if(user) return done(null , false , req.flash('errors' , 'چنین کاربری قبلا در سایت ثبت نام کرده است!'));

        const newUser = new User({
            name : req.body.name,
            email,
            mobile: req.body.mobile,
            password
        });

        newUser.save(err => {
            if(err) return done(err , false , req.flash('errors' , ' در فرایند ثبت نام خطایی رخ داده لطفاً مجدداً سعی کنید!'));
            done(null , newUser);
        })

    })
}))

وقتی فرم ثبت نام رو ارسال میکنم ارور "MongooseError: Model.findOne() no longer accepts a callback
at Function.findOne " رو دریافت میکنم . ظاهراً در متدهای نسخه های جدید mongoose نمیشه از کال بک فانکشن ها استفاده کرد . لطفاً اگر کسی در مورد این مشکل میدونه من رو راهنمایی کنه. پیشاپیش از وقتی که میگذارید تشکر میکنم.


ثبت پرسش جدید
Hoom@n
@HSHH 10 ماه پیش آپدیت شد
2

این مشکل رو به صورت زیر رفع کردم:

const passport = require('passport')
const localStrategy = require('passport-local').Strategy
const User = require('app/models/user')

passport.serializeUser(function(user, done) {
    done(null, user._id)
})

passport.deserializeUser( async function(_id, done) {
    await User.findById(_id).then((user, err)=>{
        done(err, user)
    })
})

passport.use('local.register' , new localStrategy({
    usernameField : 'email',
    passwordField : 'password',
    passReqToCallback : true
} , async (req , email ,  password , done) => {
    console.log(email , password)
    await User.findOne({ 'email' : email }).then((err , user) => {
        try {
            if(err || user) return done(null , false , req.flash('errors' , 'حساب کاربری با این ایمیل قبلاً ایجاد شده است!'))

            const newUser = new User({
                name : req.body.name,
                email,
                mobile : req.body.mobile,
                password
            })
            newUser.save().then(() => done(null , newUser))
        } catch (err) {
            if(err) return done(err , false , req.flash('errors' , 'متاسفانه در فرایند ثبت نام خطایی رخ داده، لطفاً دوباره تلاش کنید!'))
        }
    })
}))

احسان
@ehsanshahidiii73 6 ماه پیش مطرح شد
0

ممنون عالی بود


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام