部署的网站中的本地护照(猫鼬)错误

时间:2020-10-14 17:28:07

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

我在机器上开发了一个网站,当我在本地运行该网站时,它可以正常工作。我正在使用ExpressJS和Passport进行身份验证。猫鼬为数据库。

我有一个名为passport-local-mongoose的软件包,它可以正常工作,它简化了处理用户登录和注册的过程。

后端(ExpressJS)

const session = require('express-session');
const passport = require("passport");
const passportLocalMongoose = require("passport-local-mongoose");

app.use(session({
    secret: "I dunno, a secret.",
    resave: false,
    saveUninitialized: false
}))

app.use(passport.initialize()); 
app.use(passport.session()); 

当我将网站部署到heroku时,身份验证不起作用。但它在localhost上正常工作。

登录路线:

app.post('/login', (req, res) => {
    const user = new User({
        username: req.body.username,
        password: req.body.password
    })

    req.login(user, (err) => {
        if (err) return console.error(err);
        passport.authenticate('local')(req, res, () => {
            res.redirect('/')
        })
    })
})

我认为这是由于软件包passport-local-mongoose引起的,该软件包的名称暗示它仅在本地上可用。

如何从passport-local-mongoose过渡到可在实时网站上使用的软件包?我可以使用哪些软件包来实现此目的?我说passport-local-mongoose仅在本地有效吗?

我见过this个问题,但似乎无法回答我的问题。

注意:由于代码过多,我无法包含整个网站的代码。

1 个答案:

答案 0 :(得分:1)

为了澄清passport-local-mongoose应该在本地工作或在部署到服务器时工作。本地一词是护照生态系统描述使用用户名和密码的系统的方式。

根据您的路线,您无需呼叫req.login,因为passport.authenticate()中间件会自动调用req.login()

参考:http://www.passportjs.org/docs/login/

很难说出问题的根本原因是什么,但我建议您重构路由以查看是否可以解决您的问题。

app.post('/login',
  const user = new User({
    username: req.body.username,
    password: req.body.password
  })

  passport.authenticate('local', { failureRedirect: '/login' }),
    (req, res) => {
    res.redirect('/');
  });