【问题标题】:app.get("/api/current_user".. not firing after passport.js authenticated. NODEapp.get("/api/current_user".. 在通过 passport.js 身份验证后未触发。节点
【发布时间】:2017-11-16 20:52:43
【问题描述】:

我是 NodeJS 的新手。我正在尝试创建一个简单的 Web 服务器。 我现在只使用 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));                
            }
        });
    })
);

【问题讨论】:

    标签: javascript node.js passport.js


    【解决方案1】:

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

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

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

    注意事项

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

    【讨论】:

      猜你喜欢
      • 2014-12-25
      • 2019-07-08
      • 2012-10-28
      • 2013-06-26
      • 1970-01-01
      • 2017-03-31
      • 1970-01-01
      • 1970-01-01
      • 2015-03-17
      相关资源
      最近更新 更多