【问题标题】:passport js sessions does not work with Cors护照 js 会话不适用于 Cors
【发布时间】:2018-06-04 16:09:58
【问题描述】:

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

我在一个端口上使用我的前端,在另一个端口上使用我的后端。我使用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());

我的护照js是

在这里我定义了我的身份验证、序列化和反序列化用户。我的 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.' });
    });
  });
}));

我也尝试了 cookie session 而不是 mongo db,但我想这不是解决方案。问题是cors,由于某种原因护照不阅读会话。

我也尝试在 coors 中启用凭据并指定来源,但反序列化仍然没有设置用户

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

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

【问题讨论】:

  • 删除 cors() 后是否有效?我有同样的情况和同样的问题:(
  • @UtkarshPramodGupta 如果您删除了 cors,它将无法正常工作,因为您还会禁用跨域请求。所以前端将无法发出任何请求。虽然,我遇到了同样的问题并搜索了整个互联网。还是找不到办法。我正在寻找其他身份验证方式,因为 passportjs 似乎不适用于 cors,或者我只是做错了。

标签: javascript session authentication cors passport.js


【解决方案1】:

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

【讨论】:

  • 您能详细说明您的解决方案吗?
  • 我认为他的意思是这样的(对于未来的访客)flaviocopes.com/axios-credentials
  • @utkarshPramodGupta 所以我理解你所描述的问题,以及发生了什么不正确的事情。但是,在代码中,您采取了哪些措施来纠正这种情况以使其发挥作用?
猜你喜欢
  • 1970-01-01
  • 2018-12-27
  • 1970-01-01
  • 2017-09-30
  • 2015-10-05
  • 1970-01-01
  • 2023-01-12
  • 2017-06-30
  • 2019-06-23
相关资源
最近更新 更多