sariapro
3 سال پیش توسط sariapro مطرح شد
3 پاسخ

مشکل بعد از اضافه کردن passport در NodeJs

سلام
اقا ما هر وقت میایم یه امکان جدید توی nodejs اضافه کنیم و تست کنیم به دیوار می خورم و چند روز الکی دور خودم میچرخم :((

یه متد داخل یه کنترلر ساختم که کاربر وقتی فرم عضویت رو پر می کنه . هلش میدم سمت این متد .

اما توی کنسول که خطا رو چاپ کردم متن زیر رو نوشت :

ReferenceError: next is not defined
    at verifyRecaptcha.then.data (/home/workspace/nodejs/meetNodeJS/v1.2/app/http/controller/authController.js:43:30)
    at process._tickCallback (internal/process/next_tick.js:68:7)

متد عضویت :

async register(req, res) {

        await this.verifyRecaptcha(req, res)
            .then(data => {
                const validationresult = validationResult(req);
                if (!validationresult.isEmpty()) {
                    let validationErros = validationresult.array();
                    let erros = [];
                    validationErros.forEach(item => {
                        erros.push(item.msg)
                    })
                    req.flash("errors", erros);
                    return res.redirect('/auth/register');
                }

                passport.authenticate('local.register', {
                    successRedirect: '/auth/login',
                    failureRedirect: '/auth/register',
                    failureFlash: true,
                })(req, res, next)

            })
            .catch(err => {
                console.log(err);
                req.flash('errors', [err])
                return res.redirect('/auth/register')
            });
    }

محتویات متد verifyRecaptcha هست (این برای گوگل ریکپچا هست ) :‌

    verifyRecaptcha(req, res) {
        return new Promise((resolve, reject) => {
            this.recaptcha.verify(req, (err) => {
                if (err) {
                    reject('Security verification not performed correctly');
                } else {
                    resolve(true);
                }
            })
        })
    }

استراتژی local.register هم هست :

passport.use('local.register', new localStrategy(
    {
        usernameField: 'email',
        passwordField: 'password',
        passReqToCallback: true,
    }, async (req, email, password, done) => {
        let findUser = await User.findOne({ email: email });
        if (findUser) return done(null, false, req.flash('erros', ['This email has already been used by another user']))
        const newUser = new User({
            email: req.body.email,
            password: req.body.password,
        });
        await newUser.save(err => {
            return done('error', false, req.flash('errors', [err]))
        });
        return done(null, newUser, req.flash('success', ["Your Account Successfuly Created!"]))
    }
))

اما درست کار نمی کنه :((


ثبت پرسش جدید
سبحان مولایی
تخصص : برنامه‌نویس وب: Python ::...
@websaz 3 سال پیش مطرح شد
1

سلام در فانکشن register مقدار next رو دریافت نکردید.

async register(req, res,next)  

@sariapro


sariapro
@sariapro 3 سال پیش مطرح شد
0

ممنونم اقا سبحان. درست شد

یه توضیح در حد یه دیپلمه میدی بهم که چرا اصلا باید اضافه کنم؟
یه جور که منه کمم سواد بفهمم


سبحان مولایی
تخصص : برنامه‌نویس وب: Python ::...
@websaz 3 سال پیش مطرح شد
1

چیز خاصی نبود در express به یک controller سه پارامتر به نام های req res next پاس داده می شود. که شما مقدار next رو نگرفته بودید.


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

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