我正在尝试使用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。
任何人都知道我错过了什么?能够在正确的方向上获得一些帮助/指针会很棒。
谢谢!
答案 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项目。