当前位置: 首页 > 知识库问答 >
问题:

部署到Heroku时无法使用Google OAuth登录

薛文斌
2023-03-14

git repo https://github.com/detoner777/email-feedback-app

heroku错误日志:

2019-08-20t09:44:08.211815+00:00Heroku[router]:at=error code=h12 desc=“请求超时”方法=get path=“/auth/google/callback?fuserinfo.profile&authuser=0&session_state=330af188f3789437fd21ab099ebe776784cfe500.3fb5&prompt=none”host=mystrious-thicket-20426.herokuapp.com request_id=59b62556-d07c-42ae-8f7f-e89b3ab5b735 fwd=“31.134.127.229”dyno=web.1连接=1ms服务=30000ms状态=503字节=0协议=https2019-08-20t09:52:03.838240+00:00 at=info method=head path=“/”host=mystrious-thicket-20426.herokuapp.com request_id=81a31581-1aa6-478d-98af-68b6c479e32a fwd=“217.182.175.162”dyno=web.1连接=0ms服务=1ms状态=200字节=289协议=HTTPS

//inex.js
const express = require('express');
const mongoose = require('mongoose');
const cookieSession = require('cookie-session');
const passport = require('passport');
const bodyParser = require('body-parser');
const keys = require('./config/keys');
require('./models/User');
require('./services/passport');

mongoose.connect(keys.mongoURI);

const app = express();

app.use(bodyParser.json());
app.use(
    cookieSession({
        maxAge: 30 * 24 * 60 * 60 * 1000,
        keys: [keys.cookieKey]
    })
);


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

require('./routes/authRoutes')(app);
require('./routes/billingRoutes')(app);


if (process.env.NODE_ENV === 'production') {
    app.use(express.static('client/build'));
    const path = require('path');
    app.get('*', (req, res) => {
        res.sendFile(path.resolve(__dirname, 'client', 'build', 'index.html'));
    });
}

const PORT = process.env.PORT || 5000;
app.listen(PORT);


// passport.js
const passport = require('passport');
const GoogleStrategy = require('passport-google-oauth20').Strategy;
const mongoose = require('mongoose');
const keys = require('../config/keys');

const User = mongoose.model('users');

passport.serializeUser((user, done) => {
    done(null, user.id);
});

passport.deserializeUser((id, done) => {
    User.findById(id).then(user => {
        done(null, user);
    });
});

passport.use(
    new GoogleStrategy(
        {
            clientID: keys.googleClientID,
            clientSecret: keys.googleClientSecret,
            callbackURL: '/auth/google/callback',
            proxy: true
        },
        async (accessToken, refreshToken, profile, done) => {
            const existingUser = await User.findOne({ googleId: profile.id });

            if (existingUser) {
                return done(null, existingUser);
            }

            const user = await User({ googleID: profile.id }).save()
            done(null, user);
        }
    )
);

共有1个答案

葛智敏
2023-03-14

解决了它,以下是对我有效的:

请检查您的Mongodb Atlas prod数据库的用户/密码是否与您在Heroku中设置的MONGO_URI变量正确匹配,这是导致我出现此问题的原因。我认为这里很容易出现错别字,因为在创建数据库用户密码后,您无法看到该用户的密码。还要注意,用户不应该是“只读”的,而且这与登录Mongodb Atlas时使用的用户/密码组合不同。

我发现身份验证回调失败并出现超时错误的原因是文件passport.js中定义的Google策略的回调从未调用方法done()。这反过来是因为在MongoDB中查找用户的查询从未完成,因为Mongoose无法连接到mlab.com数据库。我尝试在mlab中为prod数据库创建一个新用户,并在Heroku环境变量中更新该用户,它成功了!

 类似资料:
  • 问题内容: 香港专业教育学院一直试图与heroku合作。我可以成功地使其在开发模式下工作,但是当我尝试推送到heroku时,我得到了 然后,我阅读并关注了http://blog.redistogo.com/2010/07/26/resque-with-redis-to- go/ 我把站点中列出的配置放了,但是出现了以下错误 我把我的初始化器/ resque.rb 但是它引发了上面提到的错误。在我的

  • 问题内容: 我是Yesod的新手,无法静态构建Yesod,因此可以部署到Heroku。 我已更改默认的.cabal文件以反映静态编译 而且它不再构建。我收到一堆警告,然后是许多未定义的引用,如下所示: 如果我仅使用just进行编译,而没有进行 任何编译,则一切正常,但是当尝试在Heroku上启动时,应用程序崩溃。 我尝试按照此处的建议将libgmp.so.10添加到LD_LIBRARY_PATH

  • 当我试图在heroku上部署springboot应用程序时,出现了以下错误: 无法执行目标org.apache.Maven.plugins:maven-compiler-plugin:3.8.1:在项目后端编译(default-compile):错误编译:无效的目标版本:11->[Help 1]Remote:[error]Remote:[error]要查看错误的全部堆栈跟踪,请使用-e开关重新运行

  • 问题内容: 我正在尝试将Flask应用程序部署到Heroku,但是在推送代码时出现错误 我不确定该怎么做,我尝试将端口从5000更改为33507,但无济于事。我的Procfile看起来像这样: main.py 是启动服务器的主要Flask文件。 问题答案: 在Heroku托管的Flask应用中,我使用以下代码启动服务器: 在本地开发时,它将使用端口5000,在生产环境中,Heroku将设置环境变量

  • 我设法让它在本地工作(不同的集群,单独的settings.py),但不是在部署到Heroku之后。 Heroku-自动添加DATABASE_URL配置var与postgresql,我不能删除/编辑它。 MongoDB Atlas-我已经将MongoDB Atlas集群设置为允许来自任何地方的IP。密码没有有趣的字符。 django生产设置。py公司 我在部署后直接运行迁移,它都是绿色的OK 一切都

  • 推荐先去了解下 在 Heroku 里部署 node.js 应用的文档。 首先,我们需要告诉 Heroku 安装项目的开发依赖包 devDependencies (以便能在 Heroku 环境下运行 npm run build): heroku config:set NPM_CONFIG_PRODUCTION=false 同时,我们想让应用以 生产模式 运行,绑定的主机IP为 0.0.0.0: he