设计omniauth-facebook redirect_uri不是绝对URI

时间:2017-03-02 08:02:49

标签: ruby-on-rails heroku

非常感谢你的建议。 我迁移到Heroku ,我的 facebook omniauth 身份验证存在以下问题。当我使用Facebook进行身份验证时,回调网址不起作用,我会收到以下日志错误消息发送到主页https://barteringapps.herokuapp.com/#_=_

"redirect_uri isn't an absolute URI. Check RFC 3986.","type":"OAuthException","code":191,"fbtrace_id":"BT1wrRRo64m"
method=GET path="/" host=barteringapps.herokuapp.com request_id=8913218f-703d-4da0-9388-f59d3a97bb69 fwd="81.171.81.200" dyno=web.1 connect=0ms service=11ms status=200 bytes=13425 

开发中,当我在 devise.rb facebook 中设置 callback-url 时,功能正常工作应用设置为http://127.0.0.1:5000/users/auth/facebook/callback

所以要提供更详细的日志(我省略了不重要的信息):

  1. 我点击了登录链接

    method=GET path="/users/sign_in" host=barteringapps.herokuapp.com fwd="81.171.81.200" status=200
    
  2. 我点击登录facebook

    method=GET path="/users/auth/facebook" host=barteringapps.herokuapp.com fwd="81.171.81.200" status=302 
    INFO -- omniauth: (facebook) Request phase initiated. 
    
  3. 来自facebook的回调,我注意到路径不包含主机

    method=GET path="/users/auth/facebook/callback?code='sometoken'" host=barteringapps.herokuapp.com fwd="81.171.81.200"
    
  4. 我已经在Stackoverflow上搜索了一个解决方案,我按照这个说明进行操作 Devise omniauth-facebook redirect_uri Url must absolute

    1. 我添加了:client_options
    2. 我在 devise.rb 中配置了绝对路径

      callback_url: ENV['SERVER_ROOT']+'/users/auth/facebook/callback'
      
    3. 在heroku设置中,我添加了SERVER_ROOT env变量

    4. 我还有以下疑问,因为我对env Varibles有很多问题,我为我的开发安装了 foreman gem。 Foreman作为我的网络服务器工作,并从env文件加载ENV变量。我还有一个包含以下代码的Procfile:

      web: bundle exec rails s
      
      .env 
      Procfile
      

      问题是生产仍然使用puma运行且没有Procfile

      => Booting Puma 
      => Rails 5.0.1 application starting in production on http://0.0.0.0:21255 
      => Run `rails server -h` for more startup options 
      [4] Puma starting in cluster mode... 
      

1 个答案:

答案 0 :(得分:5)

我在 Brasilian Rails Google网上论坛社区中找到了解决方案。我用英语阅读翻译的帖子,发现了以下问题。

在我的config/enfironments/production.rb文件中

config.action_mailer.default_url_options = { host: 'barteringapps.herokuapp.com' }

我可以通过将https://添加到地址来解决此问题。这是代码:

config.action_mailer.default_url_options = { host: 'https://barteringapps.herokuapp.com' }

现在facebook登录正常工作。 这是我发现问题的讨论: https://groups.google.com/d/topic/rails-br/PqMHviahB50/discussion

该帖子的作者是 Diogo Azevedo Gouveia