【问题标题】:Node js + passport+express节点js+护照+快递
【发布时间】:2019-12-28 05:03:51
【问题描述】:

我试图通过编写中间件并设置 res.locals.currentUser=req.user 来获取登录用户的信息,但即使用户登录后 req.user 也未定义。这是我的护照配置 //护照配置

app.use(require("express-session")({
    secret:"ki keh sakde aa",
    resave:false,
    saveUninitialized:false
}));
app.use(passport.initialize());
app.use(passport.session());
passport.use(new localStrategy(User.authenticate()));
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());

【问题讨论】:

    标签: node.js express passport.js passport-local


    【解决方案1】:

    我认为您不能在全局范围内从 Passport 访问用户对象,我相信您需要将其传递给您要使用的路由。

    我可能错了,但我在尝试让用户详细信息显示在所有页面的工具栏中时遇到了同样的问题。仍然没有找到合适的解决方法。

    链接到我的相同问题:Express middleware passing variable, error 'TypeError: Cannot destructure property' in middleware function but works via route definiton

    【讨论】:

    • 为了避免 req.user 访问我将要使用它的路由。我编写了一个中间件 app.use(function(req,res,next){ res.locals .currentUser=req.user; next(); });
    【解决方案2】:

    试试这样吧

    const userProfile = req.user;
        res.locals = {
            userProfile: JSON.stringify(userProfile, null, 2),
            name: userProfile.displayName,
            loggedInEmail: userProfile.emails[0].value,
            isAuthenticated: req.isAuthenticated(),
        };
    

    【讨论】:

      猜你喜欢
      • 2016-11-20
      • 2012-11-29
      • 2017-08-18
      • 2014-07-17
      • 1970-01-01
      • 2020-02-13
      • 2013-08-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多