Heroku部署的Node.js+Passport.js应用仅开发PC可登录问题
问题:Heroku部署应用后跨设备登录失败
我在Heroku上部署了一个应用,开发环境及我的PC上访问均正常,但其他设备无法完成登录操作。所有设备均可向MongoDB Atlas提交数据,说明数据库连接正常且能接收信息。参考类似问题的解决方案,提示可能存在客户端API调用指向localhost的问题,但我不清楚具体修复方式。
更新说明:注释掉Session配置中的"secure: true"后,曾短暂实现用户注册及登录功能,但目前该方法已失效。
应用代码片段
Session初始化
// Init Session app.use( session({ secret: process.env.SESSION_SECRET, resave: true, saveUninitialized: true, proxy: true, // add this line cookie: { //secure: true, It worked for a short time when I commented this out httpOnly: true, }, store: new MongoStore({ mongooseConnection: mongoose.connection }), }) ); // For Passport JS Authentication app.use(passport.initialize()); app.use(passport.session()); require("./utils/passport.auth"); app.use((req, res, next) => { res.locals.user = req.user; next(); });
Passport认证配置(passport.auth)
const passport = require('passport'); const LocalStrategy = require('passport-local').Strategy; const User = require('../models/user.model'); passport.use( new LocalStrategy( { usernameField: 'email', passwordField: 'password', }, async (email, password, done) => { try { const user = await User.findOne({ email }); // Username/email does NOT exist if (!user) { return done(null, false, { message: 'Username/email not registered', }); } // Email exist and now we need to verify the password const isMatch = await user.isValidPassword(password); return isMatch ? done(null, user) : done(null, false, { message: 'Incorrect password' }); } catch (error) { done(error); } } ) ); passport.serializeUser(function (user, done) { done(null, user.id); }); passport.deserializeUser(function (id, done) { User.findById(id, function (err, user) { done(err, user); }); });
认证路由(auth.route.js)
router.get( "/login", ensureLoggedOut({ redirectTo: "/" }), async (req, res, next) => { try { return res.render("login"); } catch (e) { console.log("e", e); } } ); router.post( "/login", passport.authenticate("local", { failureRedirect: "/auth/login", failureFlash: true, }), async (req, res) => { try { res.redirect(`/`); } catch (e) { console.log("e", e); } } );
内容的提问来源于stack exchange,提问作者Christopher Jung
相关产品推荐
相关产品推荐

