我在机器上开发了一个网站,当我在本地运行该网站时,它可以正常工作。我正在使用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个问题,但似乎无法回答我的问题。
注意:由于代码过多,我无法包含整个网站的代码。
答案 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('/');
});