首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >TypeError: req.session.regenerate不是使用Passport的函数

TypeError: req.session.regenerate不是使用Passport的函数
EN

Stack Overflow用户
提问于 2022-05-25 10:02:03
回答 3查看 7.3K关注 0票数 16

你好,我跟随课程节点的反应完整的网络栈,我有一个大的问题,我不知道它为什么会出现,或从什么是显示。我的终端显示了这个错误:

代码语言:javascript
运行
复制
req.session.regenerate(function(err) {
               ^ TypeError: req.session.regenerate is not a function

我的代码看起来很像

index.js

代码语言:javascript
运行
复制
 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.connect_url);

const app = express();

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

require("./routes/authRoutes")(app);
 
const PORT = process.env.PORT || 5000; 
app.listen(PORT);

passport.js

代码语言:javascript
运行
复制
     const passport = require("passport"); 
     const GoogleStrategy = require("passport-google-oauth20").Strategy; 
     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) => {
       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) => {
             if (existingUser) {
               // we already have a record with the given profile ID
               done(null, existingUser);
             } else {
               // we don't have a user record with this ID, make a new record!
                new User({ googleId: profile.id })
               .save()
                 .then((user) => done(null, user));
             }
           });
         }   ) );

authRouters.js

代码语言:javascript
运行
复制
        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/current_user", (req, res) => {
        res.send(req.user);
      });
    };

我真的不知道这是怎么回事,我可以说那是我去localhost:5000/auth/google的时候出现的

EN

回答 3

Stack Overflow用户

发布于 2022-06-06 14:15:17

我在做同样的课程,修正了udemy的问题。来自乌德米:

护照v.0.6.0目前因不兼容而损坏:https://github.com/jaredhanson/passport/issues/907

维护人员建议使用最新的0.5.0版本,直到一个修复程序被推开。使用:

npm卸载护照

npm安装护照@0.5

这对我来说很好。

票数 27
EN

Stack Overflow用户

发布于 2022-05-25 18:02:22

我认为发生此错误是因为护照在内部使用req.session.regenerate()函数(源代码链接),cookie-session没有regenerate方法,因此护照抛出错误。

cookie-session GitHub页面上还有一个与regenerate函数(问题链接)相关的问题。

如果将会话保留在客户端并不重要,则可以将其保存在服务器端,可以使用特快会议进行此操作,则不会出现上述错误。

票数 3
EN

Stack Overflow用户

发布于 2022-05-30 15:05:16

我也没多久就面临这个问题.好像是饼干会话包的问题.为了解决这个问题,我使用了快速会话。

代码语言:javascript
运行
复制
// install the package
npm install express-session

const session = require('express-session')

app.use(session({
   secret: 'somethingsecretgoeshere',
   resave: false,
   saveUninitialized: true,
   cookie: { secure: true }
}));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72375564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档