护照js会议与科尔斯没有合作

Mar*_*ino 5 javascript authentication session cors passport.js

我在互联网上搜索了很多,但我找不到答案.

我在一个端口使用我的前端,在另一个端口使用我的后端.我使用cors来启用请求,这是有效的.但是当我实现护照js并且使用mongodb whit的会话不起作用时,这意味着当我尝试使用req.user获取用户时,这是未定义的.这是我的index.js代码

app.use(cors());
app.use(session({
resave: false,
saveUninitialized: false,
secret: 's3cr3et',
store: new MongoStore({
    url: process.env.MONGO_URI
})
}));
app.use(passport.initialize());
app.use(passport.session());
Run Code Online (Sandbox Code Playgroud)

我的护照js是

在这里,我定义我的auth,序列化和反序列化用户.我的Auth和序列化工作正常,但不反序列化

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

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

passport.use(new LocalStrategy({ usernameField: 'email' }, (email, password, done) => {
  User.findOne({ email: email.toLowerCase() }, (err, user) => {
    if (err) { return done(err); }
    if (!user) { return done(null, false, { error: 'Invalid credentials.' }); }
    user.comparePassword(password, (err, isMatch) => {
      if (err) { return done(err); }
      if (isMatch) {
        return done(null, user);
      }
      return done(null, false, { error: 'Invalid credentials.' });
    });
  });
}));
Run Code Online (Sandbox Code Playgroud)

我也试过cookie会话而不是mongo db,但我想这不是解决方案.问题是因为某些原因护照不读会议.

此外,我尝试启用coors凭据并指定原点但反序列化仍然没有设置用户

app.use(cors({
    credentials: true,
    origin: ['http://localhost:8080']
}));
Run Code Online (Sandbox Code Playgroud)

我希望你能帮助我,因为我无法让它工作谢谢!!

Utk*_*pta 2

我遇到过同样的问题。就我而言,我在前端有一个 SPA,在 Node.js 上有一个 RESFful(好吧,不是真的,因为我们在这里维护状态)后端。后来我发现,当我向 RESTful API 发出请求时,我没有将浏览器 cookie 与数据一起发送。这正是问题所在,不允许用户进行反序列化,因为我们需要后端的 cookie 数据来找出哪个用户发送了特定请求。尝试做同样的事情,我希望这能像解决我的问题一样解决您的问题。:)