我正在使用omniauth和twitter登录我的网站。但是,每当我尝试登录时,都会出现此错误:
Started GET "/auth/failure?message=service_unavailable" for 98.83.218.118 at 2011-11-12 11:27:58 -0500
Processing by SessionsController#failure as HTML
Parameters: {"message"=>"service_unavailable"}
我唯一的线索是它可能是SSL error。
但是,我不知道如何调试错误原因。
以下是我目前的twitter配置:
Rails.application.config.middleware.use OmniAuth::Builder do
provider :twitter, 'REDACTED', 'REDACTED'
end
答案 0 :(得分:2)
在我的项目中看起来像ssl问题。
对于开发模式,您可以关闭ssl。然后你可以没有这个问题。
在develoment.rb中添加:
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
关于如何修复SSL证书: Twitter API SSL Root CA Certificate
答案 1 :(得分:1)
我不太喜欢twitter dev支持中提出的解决方案(由Yahor Zhuchkou链接),建议从不安全的服务器上下载一堆证书。
虽然验证同行的转向将在生产中起作用,但这并非真正的解决方案。您需要做的是将omniauth指向正确的PEM文件,该文件应包含支持Twitter自己的证书的Verisign根证书(i:/ C = US / O = VeriSign,Inc. / OU = Class 3 Public主要认证机构 - G2 / OU =(c)1998 VeriSign,Inc。 - 仅供授权使用/ OU = VeriSign信任网络:
-----BEGIN CERTIFICATE-----
MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcEx
CzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UE
CxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhv
cml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAt
IEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBU
cnVzdCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVow
gcExCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoG
A1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1
dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5j
LiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2ln
biBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDM
XtERXVxp0KvTuWpMmR9ZmDCOFoUgRm1HP9SFIIThbbP4pO0M8RcPO/mn+SXX
wc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71lSk8UOg013gfqLptQ5GV
j0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwIDAQABMA0G
CSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSkU01U
bSuvDV1Ai2TT1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7i
F6YM40AIOw7n60RzKprxaZLvcRTDOaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo
1KpYoJ2daZH9
-----END CERTIFICATE-----
(如果您使用的是Ubuntu,可以在此处找到它:/etc/ssl/certs/Verisign_Class_3_Public_Primary_Certification_Authority_-_G2.pem
)
不知道为什么omniauth或ruby openssl实现没有找到这个,但您可以使用以下选项显式链接到此pem文件:
provider :twitter, 'REDACTED', 'REDACTED', {
:client_options => {:ca_file => '/etc/ssl/certs/Verisign_Class_3_Public_Primary_Certification_Authority_-_G2.pem'}
}