没有路线匹配[POST] OmniAuth Steam Callback

时间:2016-02-29 14:49:19

标签: ruby-on-rails devise omniauth access-token

我正在为AngularJS应用程序构建Rails API。我正在使用devise_token_authomniauth-steam宝石。当我尝试使用Steam验证用户时出现错误:

  

ActionController :: RoutingError(没有路由匹配[POST]“/ omniauth / steam / callback”

我添加了devise_token_auth路由,但它们不会创建POST回调。我试图手动创建回调的POST路由,但它没有工作,我不确定它是否是正确的解决方案。我试图从昨天开始解决这个问题,我找不到任何类似问题的人。

配置/ routes.rb中

Rails.application.routes.draw do
  namespace 'api' do
    namespace 'v1' do
      mount_devise_token_auth_for 'Api::V1::User', at: 'auth'
    end
  end
end

配置/初始化/ omniauth.rb

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :steam, ENV['steam_api_key']
end

我使用figaro gem并在application.yml文件中保存steam_api_key。

佣金路线任务

                                Prefix Verb   URI Pattern                               Controller#Action
        new_api_v1_api_v1_user_session GET    /api/v1/auth/sign_in(.:format)            devise_token_auth/sessions#new
            api_v1_api_v1_user_session POST   /api/v1/auth/sign_in(.:format)            devise_token_auth/sessions#create
    destroy_api_v1_api_v1_user_session DELETE /api/v1/auth/sign_out(.:format)           devise_token_auth/sessions#destroy
           api_v1_api_v1_user_password POST   /api/v1/auth/password(.:format)           devise_token_auth/passwords#create
       new_api_v1_api_v1_user_password GET    /api/v1/auth/password/new(.:format)       devise_token_auth/passwords#new
      edit_api_v1_api_v1_user_password GET    /api/v1/auth/password/edit(.:format)      devise_token_auth/passwords#edit
                                       PATCH  /api/v1/auth/password(.:format)           devise_token_auth/passwords#update
                                       PUT    /api/v1/auth/password(.:format)           devise_token_auth/passwords#update
cancel_api_v1_api_v1_user_registration GET    /api/v1/auth/cancel(.:format)             devise_token_auth/registrations#cancel
       api_v1_api_v1_user_registration POST   /api/v1/auth(.:format)                    devise_token_auth/registrations#create
   new_api_v1_api_v1_user_registration GET    /api/v1/auth/sign_up(.:format)            devise_token_auth/registrations#new
  edit_api_v1_api_v1_user_registration GET    /api/v1/auth/edit(.:format)               devise_token_auth/registrations#edit
                                       PATCH  /api/v1/auth(.:format)                    devise_token_auth/registrations#update
                                       PUT    /api/v1/auth(.:format)                    devise_token_auth/registrations#update
                                       DELETE /api/v1/auth(.:format)                    devise_token_auth/registrations#destroy
       api_v1_api_v1_user_confirmation POST   /api/v1/auth/confirmation(.:format)       devise_token_auth/confirmations#create
   new_api_v1_api_v1_user_confirmation GET    /api/v1/auth/confirmation/new(.:format)   devise_token_auth/confirmations#new
                                       GET    /api/v1/auth/confirmation(.:format)       devise_token_auth/confirmations#show
            api_v1_auth_validate_token GET    /api/v1/auth/validate_token(.:format)     devise_token_auth/token_validations#validate_token
                   api_v1_auth_failure GET    /api/v1/auth/failure(.:format)            devise_token_auth/omniauth_callbacks#omniauth_failure
                                       GET    /api/v1/auth/:provider/callback(.:format) devise_token_auth/omniauth_callbacks#omniauth_success
                                       GET    /omniauth/:provider/callback(.:format)    devise_token_auth/omniauth_callbacks#redirect_callbacks
                      omniauth_failure GET    /omniauth/failure(.:format)               devise_token_auth/omniauth_callbacks#omniauth_failure
                                       GET    /api/v1/auth/:provider(.:format)          redirect(301)

我知道由于命名空间而有点乱,但它不应该导致这个问题,对吗?

编辑: 我做了一些研究,这里是链接https://github.com/lynndylanhurley/devise_token_auth#usage-tldr,它说/:provider/callback url应该有GET / POST操作,但我们可以看到我没有回调的POST操作。

1 个答案:

答案 0 :(得分:1)

最后,我通过在routes.rb文件中添加以下行来解决了这个问题。

post '/omniauth/steam/callback', to: 'overrides/omniauth_callbacks#redirect_callbacks'

我在omniauth_callbacks_controller.rb文件夹中创建了controllers/overrides文件并删除了以下行。

skip_before_action :set_user_by_token, raise: false

最后一步是使用重定向路线编辑线条。我改变了这个:

redirect_route = "#{request.protocol}#{request.host_with_port}/#{Devise.mappings[devise_mapping].fullpath}/#{params[:provider]}/callback"

硬编码路线。

redirect_route = "/api/v1/auth/steam/callback"