我最近在Heroku上部署了一个应用程序。它在开发环境中运行良好,当我通过PC访问它时也运行良好。我无法在任何非开发PC的设备上登录该应用程序。我可以在任何设备上发布到MongoDB Atlas,没有问题,因此数据库看起来像是已连接并能够接收信息。我查看了另一个用户对类似问题的另一个回答,回答是
查看您的存储库后,我会仔细检查您的数据库和API调用。在您的客户端中,您正在从本地主机URL获取数据。如果您正在运行React客户端,API调用将尝试在您的设备上本地获取信息,而不是从Heroku服务器获取信息。
我不知道如果我的电话有问题该怎么解决。MongoDB Atlas数据库正在记录注册信息,没有问题。
这是github链接:https://github.com/chrishjung/Armada-Development-master
这是关于Heroku:https://armada-phr.herokuapp.com/
**更新:**因此,在我注解掉“secure:true”,但现在它又不起作用了。
应用程序中的片段
// 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.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);
}
}
);```
1条答案
按热度按时间hgqdbh6s1#
将应用成功部署到heroku后,您将获得一个指向应用的url链接。您可以在heroku的应用设置中找到此url。找到后,复制该url并使用新url替换“http://localhost:××××”