当使用devise_token_auth gem和常规设计

时间:2015-08-28 20:18:53

标签: ruby-on-rails angularjs devise ionic-framework omniauth

我正在尝试使用ng-token-auth,devise_token_auth和omniauth-facebook在rails / angular(实际上离子)应用程序中与常规设备一起工作。

当用户通过Facebook按钮点击登录时,浏览器被重定向到Facebook,一旦应用程序被授权,我在服务器日志中看到了一个facebook回调请求:

https://<app>.herokuapp.com/omniauth/facebook/callback?code=<some_code>&state=<state>

此请求从我的服务器获得302响应以发出以下请求:

https://<app>.herokuapp.com/users/facebook/callback

此请求最终在404中,因为我的routes.rb中不存在/ users / facebook / callback的路由:

devise_for :users
namespace :api do
  scope :v1 do
    mount_devise_token_auth_for 'User', at: 'auth'
  end
end

生成以下(相关)路线:

api_v1_auth_validate_token_path GET /api/v1/auth/validate_token(.:format)       devise_token_auth/token_validations#validate_token
api_v1_auth_failure_path        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_path           GET /omniauth/failure(.:format)                 devise_token_auth/omniauth_callbacks#omniauth_failure

我不明白对/ users / facebook / callback的请求来自哪里。根据我的理解,它应该真正重定向到/ api / v1 / auth /:provider / callback。

任何人都知道我错过了什么?能够在正确的方向上获得一些帮助/指针会很棒。

谢谢!

1 个答案:

答案 0 :(得分:0)

好的,我的工作正常,似乎是一个带有devise_token_auth(0.1.34)的bug(?)。作为一种解决方法并且为了防止回调重定向到/ users / facebook / callback,我将omniauth_callbacks_controller.rb中redirect_callbacks方法的这条注释行替换为它下面的一行:

#redirect_route = "/#{Devise.mappings[devise_mapping].as_json["path"]}/#{params[:provider]}/callback"
redirect_route = "/api/v1/auth/#{params[:provider]}/callback"

它很难看,但它现在有效。我在GitHub打开了this issue项目。