OAuth2 :: Error,invalid_request:redirect_uri与应用程序配置不匹配

Lum*_*sss 8 ruby ruby-on-rails oauth heroku omniauth

我正在开发一个使用这个gem使用Bungie OAuth进行身份验证的rails应用程序.我在initializers/devise.rb中的配置如下:

config.omniauth :bungie, ENV['CLIENT_ID'], ENV['CLIENT_SECRET'], ENV['X_API_KEY'], ENV['REDIRECT_URL']
Run Code Online (Sandbox Code Playgroud)

Bungie的开发人员门户需要使用HTTPS的重定向URL,因此我将我的应用程序推送到Heroku并使用重定向强制身份验证返回localhost进行测试.使用这种方法,一切正常.但是,当我将应用程序推向生产时,Bungie对我的应用程序的响应失败了OAuth2::Error, invalid_request: redirect_uri does not match application configuration.redirect_url在我的应用程序的env变量和Bungie的开发门户中完全相同.

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

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

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

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

devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" }
Run Code Online (Sandbox Code Playgroud)

输出来自rake routes:

 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
Run Code Online (Sandbox Code Playgroud)

和我的控制器:

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
Run Code Online (Sandbox Code Playgroud)

完整的源代码可以在https://github.com/destiny-aviato/destinder找到.

小智 -1

替换凭证中 Heroku 应用程序的重定向 url