【问题标题】:omniauth and google with sinatra on herokuomn​​iauth 和 google 与 heroku 上的 sinatra
【发布时间】:2011-09-24 15:05:40
【问题描述】:

我正在尝试在 sinatra 应用程序中使用 OmniAuth,并将 google 作为登录提供程序。使用 twitter 和 facebook 提供程序可以正常工作:

require 'omniauth'
require 'openid'
require 'openid/store/filesystem'


use OmniAuth::Builder do
use OmniAuth::Strategies::OpenID, OpenID::Store::Filesystem.new('./tmp'), :name => 'google', :identifier => 'https://www.google.com/accounts/o8/id'  
end

get '/sign_in'
  redirect '/auth/google'
end

想法?当浏览器尝试获取“/auth/google”时,它会得到 503 - 服务不可用。 heroku 日志中没有任何内容

关于这可能是什么的想法或建议?

我刚刚开始对这个问题进行赏金 - 我希望的是一个适用于 heroku 的示例实现。


我提高了 heroku 的日志级别。这是我现在得到的:

2011-07-07T16:15:09+00:00 heroku[nginx]: GET /sign_in/?p=google HTTP/1.1 | 207.224.213.179 | 269 | http | 302
2011-07-07T16:15:09+00:00 app[web.1]: I, [2011-07-07T09:15:09.863397 #1]  INFO -- OpenID: Error attempting to use stored discovery information: OpenID::TypeURIMismatch
2011-07-07T16:15:09+00:00 app[web.1]: I, [2011-07-07T09:15:09.863480 #1]  INFO -- OpenID: Attempting discovery to verify endpoint
2011-07-07T16:15:09+00:00 app[web.1]: I, [2011-07-07T09:15:09.863512 #1]  INFO -- OpenID: Performing discovery on https://www.google.com/accounts/o8/id?id=AItOawlAKE9QAQb9mMRyYCCmAkEYIcqfmhrA080
2011-07-07T16:15:09+00:00 app[web.1]: I, [2011-07-07T09:15:09.865033 #1]  INFO -- OpenID: WARNING: making https request to https://www.google.com/accounts/o8/id?id=AItOawlAKE9QAQb9mMRyYCCmAkEYIcqfmhrA080 without verifying server certificate; no CA path was specified.
2011-07-07T16:15:09+00:00 app[web.1]: 207.224.213.179 - - [07/Jul/2011 09:15:09] "POST /auth/google/callback HTTP/1.1" 302 - 0.0956
2011-07-07T16:15:09+00:00 heroku[router]: GET myurl.com/auth/google/callback dyno=web.1 queue=0 wait=0ms service=100ms status=302 bytes=0

【问题讨论】:

  • 你看this了吗?
  • 是的,Twitter 提供商工作得很好。我也想让谷歌工作。 B

标签: ruby heroku sinatra omniauth


【解决方案1】:

https://github.com/intridea/omniauth/wiki/OpenID-and-Google-Apps 的页面提供了两种可能的解决方案:

在 Heroku 上,您可以将路径更改为“./tmp”或使用 Memcached。

您似乎已经尝试过 Memcached 解决方案 - 您是否在 Heroku 上运行并正确设置了 Memcached 实例?

【讨论】:

  • 我无法让 memcached 工作。 Heroku 需要 dalli,而 dalli 显然不能与 Open ID 的 memcache 存储一起使用。我将路径更改为 ./tmp,现在它转到谷歌,要求我授权应用程序,返回我的网站,但没有让我登录。看起来它仍然没有正确找到商店。
  • 没有解决问题。好的,禁用protect_from_forgery 似乎可以解决这个问题,但我想要一个更好的解决方案
【解决方案2】:

您可以使用谷歌的 openid 登录。

use OmniAuth::Builder do
  provider :openid, OpenID::Store::Filesystem.new('/tmp')
  use OmniAuth::Strategies::OpenID, OpenID::Store::Filesystem.new('/tmp'), :name => 'google', :identifier => 'https://www.google.com/accounts/o8/id'
end

【讨论】:

  • 至少不会崩溃。它去谷歌,要求我授予权限,然后回来,但它没有登录。我认为问题可能是heroku的“文件系统”是只读的。所以我会考虑建立一个不同的 openid 商店。
猜你喜欢
  • 2011-10-06
  • 1970-01-01
  • 2012-01-06
  • 1970-01-01
  • 1970-01-01
  • 2014-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多