passportjs deserializeUser在通话后没有任何事情发生

时间:2017-05-11 08:31:10

标签: node.js express orm passport.js

我正在使用nodejs并使用passportJS表达我的用户会话(在我的情况下使用会话非常重要)

基本上,我有一个仪表板,我想使用isLoggedIn中间件

授权每个请求

用户登录后,函数(deserializeUser)开始运行并运行findById,但之后没有任何事情发生!

在我的代码下面

app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
// required for passport

app.use(session({ secret: 'anything' }));
app.use(passport.initialize());
app.use(passport.session());

passport.serializeUser(function(user, done) {

    console.log("serializeUser =>"+user);

    done(null, user.id);
});

passport.deserializeUser(function(id, done) {
    console.log("Deaire ==>"+id);

    models.User.findById(id, function(err, user) {

        if(user)
            return done(false,user);
        return done(false,false);

    });
});

passport.use(new UniqueTokenStrategy({
        session: true},
    function (token, done) {
        models.User.findOne({where: {token: token}}).then(function (user) {
            models.userHasRoles.findOne({

                where: {

                    userId: user.id


                }
            }).then(function (hasRoles) {


                if (!hasRoles) {
                    return done(null, false);
                }
                return done(null, user);
            });
        })
    }

));

passport.use('local',new LocalStrategy({
        usernameField: 'phone_number',
        passwordField: 'pin',
        session: true,
        passReqToCallback : true
    },
    function(req,phone_number, pin, done) {

        console.log("Inside local str");

        models.PhoneVerification.findOne({ where: {phoneNumber: phone_number, pinCode:pin}}).then(function (phoneVerification) {

            if(phoneVerification==null){

                models.configuration.findOne({
                    where:{name :"default pin"}
                }).then(function (configuration) {

                    if(configuration.detail==pin){

                    }else {

                        return done(null, false, {message: "Couldn't login"});
                    }
                })
            }
            models.User.findOne({where: {phoneNumber: phone_number}}).then(function (user) {

                if(user == null){

                    models.User.create({
                        phoneNumber: phone_number,
                        token: randtoken.generate(32)
                    }).then(function (user) {

                        return done(null, user);
                    });
                }else {

                    user.update({token: randtoken.generate(32)}).then(function () {

                        return done(null, user);
                    });

                }
            });
        })
    }
));

所以到目前为止一切都很好,我可以检查一下是否没有登录,但如果我真的登录了,那么代码就会在那里闲置

这是我的中间件来检查会话

function isLoggedIn(req, res, next) {

console.log("first auth");

// if user is authenticated in the session, carry on
if (req.isAuthenticated()) {
    return next();

}

因此,当我尝试检查iof是否已登录时,我从控制台获取以下内容

  

Deaire ==> 17152执行(默认):SELECT idfirstName,   lastNamephoneNumberphototokendeviceTokenosInfo,   actualLatactualLngcityIdcountryIdstatus,   createdAtupdatedAt FROM users AS User WHERE Userid =   17152;

0 个答案:

没有答案