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

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – OAuth2 ::错误,invalid_request:redirect_uri与应用程序配置不匹配前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_403_0@
我正在开发使用 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.

猜你在找的Ruby相关文章