не может получить доступ к информации пользователя при входе на сайт с nodejs - PullRequest
0 голосов
/ 17 июня 2020

Мне нужно, когда пользователь входит на сайт, я проверяю информацию, по которой пользователь может получить доступ к этому маршруту или нет.

Я пишу промежуточное ПО для проверки, используется ли администратор или нет:

const middleware = require ('./ Middlware');

class AuthAdmin extends middleware {

    Handler(req, res, next) {
       console.log('in auth',req.session.user)
       //  console.log(req.isAuthenticated(),req.user.isAdmin)
        if (req.isAuthenticated() && req.user.isAdmin) {
            next();
        }
        return res.redirect('/auth/login');
    }

}

module.exports = new AuthAdmin();

это локальный логин - Паспорт:

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

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


    passport.use('local.login', new localStrategy({
    usernameField: 'phoneNumber',
    passwordField: 'password',
    passReqToCallback: true
}, (req, phoneNumber, password, done) => {
    UserModel.findOne({ 'phoneNumber': phoneNumber }, (err, user) => {
        if (err) return done(err)
        if (!user || !user.ValidationPassword(password)) {
            return done(null, false, req.flash('errors', 'کاربری با این مشخصاتا در سیستم ثبت نشده است'));
        }
        return done(null, user);
    })
}))

и использование в контроллере входа:

    class LoginController extends BaseController {

    Index(req, res) {
        res.render('auth/login');
    }

    async LoginProcess(req, res, next) {

        var result = await this.formValidation(req, res);
        if (result) {
           return await this.Login(req, res, next)
        }
        return 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,function(err) {
                if (err) console.log(err)
                if (req.body.rememberMe) {
                    user.SetRememberToken(res)
                }
                return res.redirect('/admin/dashbaord');
            })
        })(req, res, next)
    }


}

module.exports = new LoginController();

Я использую это промежуточное ПО в этом маршруте:

router.use('/admin', adminAuthntication.Handler, adminRouter);

, но каждый раз это не сработало поскольку в промежуточном программном обеспечении req.user равно undefined.

в чем проблема? как я могу решить эту проблему и сохранить информацию о пользователе в req.user ????

...