基本上,我在浏览器地址栏中键入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);
答案 0 :(得分:0)
事实证明问题是我在passport.use(新的GoogleStrategy(...))下使用了三元运算符。
而不是,
HashSet
我应该写的,
KeyValueStore
有没有人碰巧知道为什么会这样?