راکت
حل شده

انجام نشدن login

1 پاسخ

سلام دوستان نمیدونم چرا لاگین انجام نمیشه

const autoBind = require("auto-bind");
const Recaptcha = require("express-recaptcha").RecaptchaV2;
const {
    validationResult
} = require("express-validator");

module.exports = class publicController {
    constructor() {
        autoBind(this);
        this.setRecaptcha();
    }
    setRecaptcha() {
        this.recaptcha = new Recaptcha(
            configer.service.RECAPTCHA.SITE_KEY,
            configer.service.RECAPTCHA.SECRET_KEY,
            configer.service.RECAPTCHA.OPTION
        );
    }

    validationRecaptcha(req, res, next) {
        return new Promise((resolve, rejected) => {
            const err = null;
            if (err) {
                console.log(err);
                global.messages.push("گزینه امنیتی فعال نمی باشد");
                //                res.redirect("/auth/register");
                this.redirectBack(req, res)

            } else {
                resolve(true);
            }
        });
    }

    validationForm(req, res) {
        const errors = validationResult(req);
        if (!errors.isEmpty()) {
            global.messages = errors.array().map((error) => error.msg);
            //            res.redirect("/auth/register");
            this.redirectBack(req, res)
            return false
        } else {
            return true;
        }
    }

    redirectBack(req, res) {
        return res.redirect(req.header('Referer') || '/')
    }

};
const publicController = require('app/http/controllers/publicController')
const passport = require('passport')
const util = require('util');

// متغیر برای حمل پیام های تابع ولید
global.messages = [];

class controlLogin extends publicController {
     showForm(req, res, next) {
        res.render('auth/login', {
            messages ,
            recaptcha: this.recaptcha.render()
        })
    }

    async loginProcess(req,res,next) {
        global.messages = [];
        await this.validationRecaptcha(req, res,next);
        const result = this.validationForm(req, res);
        if (result) {
            this.login(req, res, next);
        }else{
            res.redirect('/auth/login')
        }
    }

    async login(req, res, next) {
        passport.authenticate('local.login', (err, user) => {
            if (!user) {
                return res.redirect('/auth/login')
            }
            req.login(user, err => {
                if (err) {
                    console.log(err)
                }
                res.redirect('/')
            })
        })(req, res,next)
    }

//    async login(req, res, next) {
//    const authenticate = util.promisify(passport.authenticate('local.login'));
//    try {
//        const user = await authenticate(req, res);
//        if (!user) {
//            return res.redirect('/auth/login');
//        }
//        req.login(user, err => {
//            if (err) {
//                console.log(err);
//            }
//            res.redirect('/');
//        });
//    } catch (err) {
//        console.log(err);
//        res.redirect('/auth/login');
//    }
}

module.exports = new controlLogin()
const passport = require("passport");
const localStrategy = require("passport-local").Strategy;
const UserModel = require("app/models/users");
const {
    where
} = require("sequelize");

passport.use("local.register", new localStrategy({
    usernameField: "email",
    passwordField: "password",
    passReqToCallback: true,
}, (req, email, password, done) => {
    UserModel.findOne({
        where: {
            email: email
        }
    }).then((user) => {
        if (user) {
            return done(
                null,
                false,
                global.messages.push("این اطلاعات قبلا در سیستم ثبت شده است")
            );
        } else {
            UserModel.create({
                    name: req.body.name,
                    email: email,
                    password: password,
                })
                .then((createdUser) => {
                    return done(null, createdUser);
                })
                .catch((error) => {
                    console.log(error);
                    global.messages.push("امکان ذخیره اطلاعات وجود ندارد");
                    return done(error);
                });
        }
    }).catch((error) => {
        return done(error)
    });
}));
//passport.serializeUser(function (user, cb) {
//    process.nextTick(function () {
//        return cb(null, {
//            id: user.id,
//            username: user.username,
//            picture: user.picture,
//        });
//    });
//});
//
//passport.deserializeUser(function (user, cb) {
//    process.nextTick(function () {
//        return cb(null, user);
//    });
//});

passport.use('local.login', new localStrategy({
    usernameField: "email",
    passwordField: "password",
    passReqToCallback: true,
}, (req, email, password, done) => {
    UserModel.findOne({
        where: {
            email: email
        }
    }, (err, user) => {
        if (err) return done(err)
        if (!user) return done(null, false, global.messages.push('اکاربری با این اطلاعات ثبته نام نکرده است'))
        done(null, user)
    })
}))

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

passport.deserializeUser((id, done) => {
  User.findByPk(id).then(user => {
    done(null, user);
  }).catch(err => done(err));
});

روت ها در جای خودشونه...

جواد
جواد
@node.core
ثبت پرسش جدید

پاسخ‌ها

1
vahid
vahid
@vahid1379

تخصص: توسعه دهنده وردپرس

بهترین پاسخ

اگه انجام نمیشه یعنی اشتباه انجام دادی دوباره تلاش کن

شاید پاسخ شما همین‌جا باشد

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

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