【问题标题】:How to Twitter Authenticate with multiple hostnames from one domain using the same Twitter App?如何使用同一个 Twitter 应用程序对来自一个域的多个主机名进行 Twitter 身份验证?
【发布时间】:2012-08-13 04:29:41
【问题描述】:

我的 DNS 将两个主机名发送到同一个 IP:

  • theark.info
  • www.theark.info

我在我的 Twitter 应用程序中使用theark.info 明确设置了我的回调和域名。确保我可以使用 www.theark.info 将同一 Twitter 应用程序用于 Oauth 的最佳方法是什么,因为我目前遇到错误:

内部服务器错误

在我的 DNS 中,我的 DNS 中有一个 CNAME www 指向 theark.info

也许我需要在请求中使用 Express 和 Javacsript 来操作 DOM?

【问题讨论】:

  • 显示一些代码,最好是最小的测试用例。
  • 不是代码问题。这是 twitters 身份验证机制,它只允许回调一个主机名 IIRC。您应该不需要查看任何代码。
  • 即使是身份验证机制的问题,有关内部服务器错误的更多细节(例如控制台输出)也可以提供更好的答案。
  • @Patrick 这是我收到的唯一一个错误
  • 节点控制台中的每个错误都应该有一个堆栈跟踪。如果没有,您可以更改您的记录器: app.use(express.logger('dev'));和错误处理:app.use(function(err, req, res, next) { console.error(err.stack); res.send(err); });

标签: node.js twitter express twitter-oauth passport.js


【解决方案1】:

您无法更改 Twitter(或任何其他 OAuth 提供商),它们都只提供一个回调到一个域。一个简单的解决方案是将所有请求从http://domain.com 重新路由到http://www.domain.com,以便所有访问者在进行身份验证之前最终访问 www.domain.com。您应该能够在您的 DNS 上或使用 req.header 重定向服务器端执行此操作:

app.get('/*', function(req, res, next) {
  if (req.headers.host.match(/^www/) !== null ) {
    res.redirect('http://' + req.headers.host.replace(/^www\./, '') + req.url);
  } else {
    next();     
  }
})

复制自this answer

使用passport.js认证时,尝试指定回调url:

passport.use(new TwitterStrategy({
    consumerKey: auth_keys.twitter.consumerKey,
    consumerSecret: auth_keys.twitter.consumerSecret,
    callbackURL: auth_keys.twitter.callbackURL
  },
  function(token, tokenSecret, profile, done) {
    process.nextTick(function () {
      User.twitterAuth({ profile: profile }, function (err, user) {
        return done(err, user);
      });
    });
  }
));

并确保 callbackURL 与 Twitter 中配置的完全相同。如果您在 localhost 上运行 node 进行开发,请尝试两个不同的密钥文件并在 twitter 上创建另一个身份验证应用程序,并将 127.0.0.1:3000 作为回调地址。您可以切换开发和生产的关键文件:

if (app.get('env') == 'development') {
  auth_keys = require('./lib/keys_dev');
} 
if (app.get('env') == 'production') {
  auth_keys = require('./lib/keys_live');
}

【讨论】:

  • 你如何重新安排路线?据我所知,DNS 只是解析为一个 IP。它实际上并不会更改您的浏览器与之交谈或作为的域名。我的 DNS 中有一个 CNAME 'www' 指向 'theark.info'
  • 我编辑了答案小捏来回答问题的症结所在。基本上,我很确定它需要服务器端 HTTP 重定向。感谢您的回复。
  • CNAME 只是将其解析为相同的 IP。它实际上并没有更改主机名。本周末我将尝试服务器端 302 重定向。这将明确告诉 Web 客户端更改主机名。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-24
  • 2015-05-24
  • 2021-10-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多