Lea*_*cim 7 authentication facebook ruby-on-rails omniauth
我正在按照Ryan Bate的指示使用Omniauth建立第三方认证,除了我正在尝试使用Facebook而不是Twitter,他在RailsCast 235中设置了它.
安装omniauth-facebook gem后,设置初始化程序
Rails.application.config.middleware.use OmniAuth::Builder do
provider :facebook, 'APP_ID', 'APP_SECRET'
end
Run Code Online (Sandbox Code Playgroud)
我应该可以去localhost:3000/auth/facebook并获得Facebook登录(尽管它最终不会起作用,因为我们还没有设置回调网址)但是,当我去那个网址时,我收到这个错误
{
"error": {
"message": "Error validating application.",
"type": "OAuthException",
"code": 101
}
}
Run Code Online (Sandbox Code Playgroud)
并且url实际上变为
https://graph.facebook.com/oauth/authorize?response_type=code&client_id=APP_ID&redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Fauth%2Ffacebook%2Fcallback&scope=email%2Coffline_access
Run Code Online (Sandbox Code Playgroud)
在我的应用程序上,我已经设置了Devise并按照Devise wiki上的说明整合了Facebook授权https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview
谁能告诉我问题可能是什么?
对错误消息进行谷歌搜索显示,最近几周有不少人遇到过这个问题,但却找不到任何有解决方案的人

我搜索了101,我偶然发现了这个页面.如您所见,该错误代表无效的API密钥,因此我认为问题在于您定义密钥的位置.
您应该在单独的文件中设置密钥和秘密(为了清晰和安全),但要注意Rails 按字母顺序加载文件,以便定义这些常量的文件应该具有在配置oauth连接的文件之前的名称.就我而言,我创建了一个名为的文件constants.rb,它来自之前devise.rb.此外,请确保将此文件远离源代码管理.你不希望别人拥有你的钥匙和秘密.
# config/initializers/constants.rb
FACEBOOK_KEY = 'string'
FACEBOOK_SECRET = 'string'
Run Code Online (Sandbox Code Playgroud)
然后,如果您正在使用设计,请在您的设计文件中配置您的连接;如果您使用简单的omniauth,则在您的omniauth文件中配置连接:
# config/initializers/devise.rb|omniauth.rb
require 'omniauth-facebook'
config.omniauth :facebook, FACEBOOK_KEY, FACEBOOK_SECRET
Run Code Online (Sandbox Code Playgroud)
现在,使用ENV变量有更好的方法.我推荐Figaro gem,因为它真正简化了配置应用程序.
如果要将Facebook对话框页面显示为弹出窗口,则需要使用
config.omniauth :facebook, FACEBOOK_KEY, FACEBOOK_SECRET, :display => 'popup'
Run Code Online (Sandbox Code Playgroud)
并在以后跟随这个问题.
而且,如果您使用的是Windows,则需要证书才能使SSL连接失败.Arcolye 在此澄清了这个问题的解决方案.
最后,要在本地测试您的登录信息,您只需将您的站点URL定义为http://localhost:3000/.这就是全部.你不是要定义你的画布网址.
| 归档时间: |
|
| 查看次数: |
4448 次 |
| 最近记录: |