反序列化后,为什么护照不保存用户对象?

时间:2018-01-28 01:07:01

标签: javascript node.js passport.js

基本上,我在浏览器地址栏中键入localhost:5000 / auth / google,它会指示我使用google页面登录。当我点击我的个人资料时,它会将我重定向到Can not GET / auth / google / callback,到目前为止还没有。

但是,当我转到应该显示req.user对象的路由器时,我得到一个未定义的对象(空页)。在localhost:5000 / api / user。

我的代码的Passport部分出了什么问题?

const express = require('express');
const passport = require('passport');
const GoogleStrategy = require('passport-google-oauth20').Strategy;
const keys = require('./config/keys');
const mongoose = require('mongoose');
require('./models/user'); // must be executed before User = mongoose.model('user')
const User = mongoose.model('users');
const cookie = require('cookie-session');

mongoose.Promise = global.Promise;
mongoose.connect(keys.mongoURI);


const app = express();



app.use(
    cookie({
        maxAge: 30 * 24 * 60 * 60 * 1000,
        keys: [keys.cookieKey],
    })
);


// set passport middleware
app.use(passport.initialize());
app.use(passport.session());


/////////////////////// PASSPORT /////////////////////////////////

passport.serializeUser((user, done) => {
    console.log("seralized")
    done(null, user.id);
});

passport.deserializeUser((id, done) => {
    console.log("deserialized")
    User.findById(id).then(user => {
        done(null, user);
    });
});


passport.use(new GoogleStrategy({
    clientID: keys.googleClientID,
    clientSecret: keys.googleClientSecret,
    callbackURL: '/auth/google/callback',
}, (accessToken, refreshToken, profile, done) => {
    User.findOne({ googleId: profile.id }).then(
        existingUser => {
            existingUser ? done(null, existingUser) :
                new User({ googleId: profile.id }).save().then(
                    user => done(null, user)
                )
        }
    )
}));


/////////////////////// END PASSPORT /////////////////////////////////


///////////////////////////////ROUTING ///////////////////////////////

app.get('/', (req, res) => {
    res.send('<p> some html </p>');
});



app.get('/auth/google', passport.authenticate('google', {
    scope: ['profile', 'email']
}));

app.get('/auth/google/callback', passport.authenticate('google'));

app.get('/api/user', (req, res) => {
    res.send(req.user);
});



app.listen(5000);

1 个答案:

答案 0 :(得分:0)

事实证明问题是我在passport.use(新的GoogleStrategy(...))下使用了三元运算符。

而不是,

HashSet

我应该写的,

KeyValueStore

有没有人碰巧知道为什么会这样?