2011-06-28 80 views
1

我想在谷歌作爲登錄提供商在一個sinatra應用程序中使用OmniAuth。使用twitter和facebook提供程序工作正常:omniauth和谷歌與sinatra on heroku

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 
+1

你看過[this](https://github.com/intridea/omniauth/wiki/Sinatra-Example)嗎? – daddz

+0

是的嘰嘰喳喳提供程序很好。我只想讓谷歌工作。 B – ConsultUtah

回答

0

https://github.com/intridea/omniauth/wiki/OpenID-and-Google-Apps頁面給出了兩個可能的解決方案:

在Heroku上你可以將路徑更改爲「./tmp」或使用Memcached。

看起來你已經嘗試過Memcached解決方案 - 你有一個Memcached實例在Heroku上運行並正確安裝嗎?

+0

我無法獲得memcached的工作。 Heroku要求dalli和dalli顯然不適用於Open ID的memcache存儲。我將路徑更改爲./tmp,現在轉到google,要求我授權應用程序,返回到我的網站,但不會將我登錄。仍然看起來它沒有正確找到商店。 – ConsultUtah

+0

接受?它解決了嗎? –

+0

它沒有解決問題。好的,禁用protect_from_forgery似乎解決了這個問題,但我想要一個更好的解決方案 – qichunren

0

你可以使用谷歌的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 
+0

至少不會崩潰。它去谷歌,要求我授予權利,然後回來,但它不登錄。我認爲這個問題可能是因爲heroku的「文件系統」是隻讀的。所以我會考慮設立一個不同的openid商店。 – ConsultUtah

相關問題