gpt4 book ai didi

javascript - app.get ("/api/current_user".. passport.js 认证后不触发。 Node

转载 作者:行者123 更新时间:2023-11-30 20:58:53 26 4
gpt4 key购买 nike

我是 NodeJS 的新手。我正在尝试创建一个简单的网络服务器。我现在只使用 NodeJS 和 Passport.js(使用谷歌策略)。

目前,当我未通过身份验证时,所有 app.get("") 调用都在工作,但是一旦我通过 google 进行身份验证并且发生回调,我就无法再访问任何 app.get 路由。我尝试在箭头函数中放置一个断点,但它从不调用,只是在使用 auth cookie 从浏览器加载时挂起。

这是我当前的代码:

索引.js

const express = require('express');
const mongoose = require('mongoose');
const cookieSession = require("cookie-session");
const passport = require("passport");
const keys = require('./config/keys');
require('./models/User');
require('./services/passport');

mongoose.connect(keys.mongoURI);

const app = express();

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

app.use(passport.initialize());
app.use(passport.session());

require('./routes/authRoutes')(app);

const PORT = process.env.PORT || 5000;
app.listen(PORT);

authRoutes.js

   const passport = require('passport');

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

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

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

app.get("/api/current_user", (req, res) => {
res.send("test");//req.user); //Tried as a test, is called when
//not authenticated, but does not get
//called when authenticated
});
}

Passport .js

const passport = require('passport');
const googleStrategy = require('passport-google-oauth20');
const mongoose = require('mongoose');
const keys = require('../config/keys');
const User = mongoose.model("users");

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

passport.deserializeUser((id, done)=> {
User.findById(id)
.then(user =>{
doen(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) => {
if (existingUser){
//we already have a user
done(null, existingUser);
}
else{
new User({ googleId: profile.id })
.save()
.then (user => done(null, user));
}
});
})
);

最佳答案

除了检查 TYPOS 之外,这可能对任何人都没有帮助!

我在这里发现了我的问题:

passport.deserializeUser((id, done)=> {
User.findById(id)
.then(user =>{
doen(null, user);
});
});

应该做的通知

在这方面我没有收到任何对我有帮助的错误消息。

关于javascript - app.get ("/api/current_user".. passport.js 认证后不触发。 Node ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47329940/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com