设计omniauth-facebook redirect_uri不是绝对的URI

Fab*_*lio 2 ruby-on-rails heroku

非常感谢你的建议.我迁移到Heroku,我有facebook omniauth身份验证的以下问题.当我使用facebook进行身份验证时,回调URL不起作用,我会收到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 
Run Code Online (Sandbox Code Playgroud)

开发中,当我在devise.rbfacebook App设置中设置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
    
    Run Code Online (Sandbox Code Playgroud)
  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. 
    
    Run Code Online (Sandbox Code Playgroud)
  3. 从facebook回调,我注意到该路径不包括我的主机

    method=GET path="/users/auth/facebook/callback?code='sometoken'" host=barteringapps.herokuapp.com fwd="81.171.81.200"
    
    Run Code Online (Sandbox Code Playgroud)

我已经搜索了Stackoverflow的解决方案,我按照这个说明 设计了omniauth-facebook redirect_uri Url必须绝对

  1. 我补充说:client_options
  2. 我在devise.rb中配置了这样的绝对路径

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

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

web: bundle exec rails s

.env 
Procfile
Run Code Online (Sandbox Code Playgroud)

问题是生产仍然使用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... 
Run Code Online (Sandbox Code Playgroud)

Fab*_*lio 5

我在Brasilian Rails Google Groups社区中找到了解决方案.我用英文阅读翻译的帖子,发现了以下问题.

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

config.action_mailer.default_url_options = { host: 'barteringapps.herokuapp.com' }
Run Code Online (Sandbox Code Playgroud)

我能够通过添加https://到地址来解决这个问题.这是代码:

config.action_mailer.default_url_options = { host: 'https://barteringapps.herokuapp.com' }
Run Code Online (Sandbox Code Playgroud)

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

该帖子的作者是Diogo Azevedo Gouveia