Heroku应用程序登录只能在开发PC上运行,不能在任何其他设备上运行(Node.js、Passport.js)

bbmckpt7  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(126)

我最近在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);
    }
  }
);```
hgqdbh6s

hgqdbh6s1#

将应用成功部署到heroku后,您将获得一个指向应用的url链接。您可以在heroku的应用设置中找到此url。找到后,复制该url并使用新url替换“http://localhost:××××”

相关问题