微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ruby-on-rails – OAuth2 ::错误,invalid_request:redirect_uri与应用程序配置不匹配

我正在开发使用 this gem使用Bungie OAuth进行身份验证的rails应用程序.我在initializers / devise.rb中的配置如下:
config.omniauth :bungie,ENV['CLIENT_ID'],ENV['CLIENT_SECRET'],ENV['X_API_KEY'],ENV['REDIRECT_URL']

Bungie的开发人员门户网站需要使用HTTPS的重定向URL,因此我将我的应用程序推送到Heroku并使用a redirect强制验证回到localhost进行测试.使用这种方法,一切正常.但是,当我将应用程序推送到生产环境时,从Bungie返回我的应用程序的响应失败了OAuth2 :: Error,invalid_request:redirect_uri与应用程序配置不匹配. redirect_url在我的应用程序的env变量和Bungie的开发门户中完全相同.

看到它正在生产中,我只能看到我能看到的日志.我已经尝试在浏览器中的开发工具的网络选项卡中跟踪请求,但一切看起来都应该如此.

我曾尝试与bungie-oauth2 gem的开发人员合作,但我们未能达成一个解决方案(他的prod应用程序可以正常工作).

在Heroku中是否有任何可能导致redirect_url不同的东西?

根据要求,这是我的omniauth路线:

devise_for :users,:controllers => { :omniauth_callbacks => "users/omniauth_callbacks" }

耙路线的输出

users_sign_out GET      /users/sign_out(.:format)             devise/sessions#destroy
          new_user_session GET      /users/sign_in(.:format)              devise/sessions#new
              user_session POST     /users/sign_in(.:format)              devise/sessions#create
      destroy_user_session DELETE   /users/sign_out(.:format)             devise/sessions#destroy
user_bungie_omniauth_authorize GET|POST /users/auth/bungie(.:format)          users/omniauth_callbacks#passthru
user_bungie_omniauth_callback GET|POST /users/auth/bungie/callback(.:format) users/omniauth_callbacks#bungie
         new_user_password GET      /users/password/new(.:format)         devise/passwords#new
        edit_user_password GET      /users/password/edit(.:format)        devise/passwords#edit
             user_password PATCH    /users/password(.:format)             devise/passwords#update
                           PUT      /users/password(.:format)             devise/passwords#update
                           POST     /users/password(.:format)             devise/passwords#create
  cancel_user_registration GET      /users/cancel(.:format)               devise/registrations#cancel
     new_user_registration GET      /users/sign_up(.:format)              devise/registrations#new
    edit_user_registration GET      /users/edit(.:format)                 devise/registrations#edit
         user_registration PATCH    /users(.:format)                      devise/registrations#update
                           PUT      /users(.:format)                      devise/registrations#update
                           DELETE   /users(.:format)                      devise/registrations#destroy
                           POST     /users(.:format)                      devise/registrations#create

和我的控制器:

def bungie
  @user = User.from_omniauth(request.env["omniauth.auth"])

  if @user.persisted?
    @user.remember_me = true
    sign_in_and_redirect @user,:event => :authentication
  else
    session["devise.bungie_data"] = request.env["omniauth.auth"]
    redirect_to root_path
  end
end

完整来源可在https://github.com/destiny-aviato/destinder找到.

解决方法

在您的身份验证请求中将redirect_uri param编码为bungie跳出:
https%25253A%25252F%25252Fdestinder.herokuapp.com%25252Fusers%25252Fauth%25252Fbungie%25252Fcallback

要简单地阅读它,我必须解码它三次.通常,params只编码一次

URI.decode(URI.decode(URI.decode("https%25253A%25252F%25252Fdestinder.herokuapp.com%25252Fusers%25252Fauth%25252Fbungie%25252Fcallback")))

不确定这是否是导致问题的原因.你可以检查一下当你从本地点击时,request_uri被编码的次数.如果它小于3,那么在heroku部署期间,您的request_uri会被编码一次额外的时间.

获取本地的request_uri,请从bungie注销,点击您当地的“使用bungie登录”.浏览器中的url会有request_uri.

原文地址:https://www.jb51.cc/ruby/269950.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐