1

我正在使用安裝程序devise_token_auth API後端移動應用程序。devise_token_auth的問題Rails 5 API和Omniauth - 之前的process_action回調:set_user_by_token尚未定義

我使用:

  • 色器件(4.0.3)
  • devise_token_auth(0.1.37)
  • omniauth(1.3.1)
  • omniauth Facebook的(3.0.0)
  • 帶API-only選項的Rails 5.0.0.rc1

一切正常,電子郵件作爲提供者

爲了正確執行客戶端Facebook登錄,並且仍然能夠在服務器上進行驗證,我下面的omniauth寶石指示的方法:

https://github.com/mkdynamic/omniauth-facebook 請參閱:客戶端流程與Facebook的Javascript SDK的

基本上說,處理所有登錄在客戶端,並且一旦用戶登錄,重定向到auth/facebook/callback(或omniauth/Facebook /回調的API回調URL取決於您的路線),並讓Omniauth解析簽名的cookie和代碼參數。

由於我使用的是devise_token_auth,所以此時gem應該生成一個令牌並使用provider:facebook而不是provider:email登錄。

首先,我不得不打開會話並在中間件中閃存,因爲由於某些原因omniauth需要它們(Rails 5 api-only模式將它們刪除)。

但現在我的問題是調用get認證/ Facebook的/回調時我收到此錯誤(或omniauth/Facebook的/回調)無論任何參數/餅乾存在的:

**ArgumentError (Before process_action callback :set_user_by_token has not been defined)** 



Full stack trace follows. 
Any help would be appreciated. 

Started GET "/auth/facebook/callback" for 127.0.0.1 at 2016-05-30 14:43:47 -0500 
ActiveRecord::SchemaMigration Load (0.2ms) SELECT "schema_migrations".* FROM "schema_migrations" 

ArgumentError (Before process_action callback :set_user_by_token has not been defined): 

activesupport (5.0.0.rc1) lib/active_support/callbacks.rb:641:in block (2 levels) in skip_callback' activesupport (5.0.0.rc1) lib/active_support/callbacks.rb:637:ineach' 
activesupport (5.0.0.rc1) lib/active_support/callbacks.rb:637:in block in skip_callback' activesupport (5.0.0.rc1) lib/active_support/callbacks.rb:568:inblock in update_callbacks' 
activesupport (5.0.0.rc1) lib/active_support/callbacks.rb:566:in reverse_each' activesupport (5.0.0.rc1) lib/active_support/callbacks.rb:566:in__update_callbacks' 
activesupport (5.0.0.rc1) lib/active_support/callbacks.rb:636:in skip_callback' actionpack (5.0.0.rc1) lib/abstract_controller/callbacks.rb:210:inblock (3 levels) in module:ClassMethods' 
actionpack (5.0.0.rc1) lib/abstract_controller/callbacks.rb:93:in block in _insert_callbacks' actionpack (5.0.0.rc1) lib/abstract_controller/callbacks.rb:92:ineach' 
actionpack (5.0.0.rc1) lib/abstract_controller/callbacks.rb:92:in _insert_callbacks' actionpack (5.0.0.rc1) lib/abstract_controller/callbacks.rb:209:inblock (2 levels) in module:ClassMethods' 
devise_token_auth (0.1.37) app/controllers/devise_token_auth/omniauth_callbacks_controller.rb:5:in <class:OmniauthCallbacksController>' devise_token_auth (0.1.37) app/controllers/devise_token_auth/omniauth_callbacks_controller.rb:2:inmodule:DeviseTokenAuth' 
devise_token_auth (0.1.37) app/controllers/devise_token_auth/omniauth_callbacks_controller.rb:1:in <top (required)>' activesupport (5.0.0.rc1) lib/active_support/dependencies.rb:477:inload' 
activesupport (5.0.0.rc1) lib/active_support/dependencies.rb:477:in block in load_file' activesupport (5.0.0.rc1) lib/active_support/dependencies.rb:662:innew_constants_in' 
activesupport (5.0.0.rc1) lib/active_support/dependencies.rb:476:in load_file' activesupport (5.0.0.rc1) lib/active_support/dependencies.rb:375:inblock in require_or_load' 
activesupport (5.0.0.rc1) lib/active_support/dependencies.rb:37:in block in load_interlock' activesupport (5.0.0.rc1) lib/active_support/dependencies/interlock.rb:12:inblock in loading' 
activesupport (5.0.0.rc1) lib/active_support/concurrency/share_lock.rb:117:in exclusive' activesupport (5.0.0.rc1) lib/active_support/dependencies/interlock.rb:11:inloading' 
activesupport (5.0.0.rc1) lib/active_support/dependencies.rb:37:in load_interlock' activesupport (5.0.0.rc1) lib/active_support/dependencies.rb:358:inrequire_or_load' 
activesupport (5.0.0.rc1) lib/active_support/dependencies.rb:511:in load_missing_constant' activesupport (5.0.0.rc1) lib/active_support/dependencies.rb:203:inconst_missing' 
activesupport (5.0.0.rc1) lib/active_support/inflector/methods.rb:270:in const_get' activesupport (5.0.0.rc1) lib/active_support/inflector/methods.rb:270:inblock in constantize' 
activesupport (5.0.0.rc1) lib/active_support/inflector/methods.rb:266:in each' activesupport (5.0.0.rc1) lib/active_support/inflector/methods.rb:266:ininject' 
activesupport (5.0.0.rc1) lib/active_support/inflector/methods.rb:266:in constantize' activesupport (5.0.0.rc1) lib/active_support/dependencies.rb:583:inget' 
activesupport (5.0.0.rc1) lib/active_support/dependencies.rb:614:in constantize' actionpack (5.0.0.rc1) lib/action_dispatch/http/request.rb:93:incontroller_class' 
actionpack (5.0.0.rc1) lib/action_dispatch/routing/route_set.rb:44:in controller' actionpack (5.0.0.rc1) lib/action_dispatch/routing/route_set.rb:30:inserve' 
actionpack (5.0.0.rc1) lib/action_dispatch/routing/mapper.rb:16:in block in <class:Constraints>' actionpack (5.0.0.rc1) lib/action_dispatch/routing/mapper.rb:46:inserve' 
actionpack (5.0.0.rc1) lib/action_dispatch/journey/router.rb:39:in block in serve' actionpack (5.0.0.rc1) lib/action_dispatch/journey/router.rb:26:ineach' 
actionpack (5.0.0.rc1) lib/action_dispatch/journey/router.rb:26:in serve' actionpack (5.0.0.rc1) lib/action_dispatch/routing/route_set.rb:725:incall' 
actionview (5.0.0.rc1) lib/action_view/digestor.rb:12:in call' omniauth (1.3.1) lib/omniauth/strategy.rb:186:incall!' 
omniauth (1.3.1) lib/omniauth/strategy.rb:164:in call' omniauth (1.3.1) lib/omniauth/strategy.rb:186:incall!' 
omniauth (1.3.1) lib/omniauth/strategy.rb:164:in call' omniauth (1.3.1) lib/omniauth/builder.rb:63:incall' 
rack-attack (4.4.1) lib/rack/attack.rb:100:in call' rack (2.0.0.rc1) lib/rack/session/abstract/id.rb:222:incontext' 
rack (2.0.0.rc1) lib/rack/session/abstract/id.rb:216:in call' actionpack (5.0.0.rc1) lib/action_dispatch/middleware/cookies.rb:613:incall' 
warden (1.2.6) lib/warden/manager.rb:35:in block in call' warden (1.2.6) lib/warden/manager.rb:34:incatch' 
warden (1.2.6) lib/warden/manager.rb:34:in call' rack (2.0.0.rc1) lib/rack/etag.rb:25:incall' 
rack (2.0.0.rc1) lib/rack/conditional_get.rb:25:in call' rack (2.0.0.rc1) lib/rack/head.rb:12:incall' 
activerecord (5.0.0.rc1) lib/active_record/migration.rb:552:in call' actionpack (5.0.0.rc1) lib/action_dispatch/middleware/callbacks.rb:38:inblock in call' 
activesupport (5.0.0.rc1) lib/active_support/callbacks.rb:97:in `__run_callbacks' 
activesupport (5.0.0.rc1) lib/active_support/callbacks.rb:750:in _run_call_callbacks' activesupport (5.0.0.rc1) lib/active_support/callbacks.rb:90:inrun_callbacks' 
actionpack (5.0.0.rc1) lib/action_dispatch/middleware/callbacks.rb:36:in call' actionpack (5.0.0.rc1) lib/action_dispatch/middleware/executor.rb:12:incall' 
actionpack (5.0.0.rc1) lib/action_dispatch/middleware/remote_ip.rb:79:in call' actionpack (5.0.0.rc1) lib/action_dispatch/middleware/debug_exceptions.rb:49:incall' 
actionpack (5.0.0.rc1) lib/action_dispatch/middleware/show_exceptions.rb:31:in call' railties (5.0.0.rc1) lib/rails/rack/logger.rb:36:incall_app' 
railties (5.0.0.rc1) lib/rails/rack/logger.rb:24:in block in call' activesupport (5.0.0.rc1) lib/active_support/tagged_logging.rb:70:inblock in tagged' 
activesupport (5.0.0.rc1) lib/active_support/tagged_logging.rb:26:in tagged' activesupport (5.0.0.rc1) lib/active_support/tagged_logging.rb:70:intagged' 
railties (5.0.0.rc1) lib/rails/rack/logger.rb:24:in call' actionpack (5.0.0.rc1) lib/action_dispatch/middleware/request_id.rb:24:incall' 
rack (2.0.0.rc1) lib/rack/runtime.rb:22:in call' activesupport (5.0.0.rc1) lib/active_support/cache/strategy/local_cache_middleware.rb:28:incall' 
actionpack (5.0.0.rc1) lib/action_dispatch/middleware/executor.rb:12:in call' actionpack (5.0.0.rc1) lib/action_dispatch/middleware/static.rb:136:incall' 
rack (2.0.0.rc1) lib/rack/sendfile.rb:111:in call' rack-cors (0.4.0) lib/rack/cors.rb:80:incall' 
railties (5.0.0.rc1) lib/rails/engine.rb:522:in call' puma (3.4.0) lib/puma/configuration.rb:224:incall' 
puma (3.4.0) lib/puma/server.rb:569:in handle_request' puma (3.4.0) lib/puma/server.rb:406:inprocess_client' 
puma (3.4.0) lib/puma/server.rb:271:in block in run' puma (3.4.0) lib/puma/thread_pool.rb:114:inblock in spawn_thread' 

按照要求,這是我的應用程序控制器。 omn​​iauth控制器是寶石提供的默認控制器。我沒有修改它們。

class ApplicationController < ActionController::API 
    include DeviseTokenAuth::Concerns::SetUserByToken 

    before_action :configure_permitted_parameters, if: :devise_controller? 

    before_action :authenticate_user_with_filter 

    #this method will authenticate users using devise_token_auth unless 
    #the controller is one of devise_token_auth 
    #authentication will look for uid, client and token in header calls 
    #and return 401 on no match 
    def authenticate_user_with_filter 
    if params[:controller] 
     if !params[:controller].start_with? 'devise_token_auth' 
     authenticate_user! 
     end 
    end 
    end 

    protected 

    def configure_permitted_parameters 
     devise_parameter_sanitizer.permit(:sign_up, keys: [:country_id, :fb_id, :fb_access_token, :code, :provider, :uid, :state, :omniauth_callback]) 
    devise_parameter_sanitizer.permit(:account_update, keys: [:country_id, :fb_id, :fb_access_token]) 

    end 

end 

順便說一句,我也只是管理在我的Gemfile直接從GitHub指向最新devise_token_auth高手來解決這個特定的問題。最近必須修正一些錯誤,因爲錯誤消失了,儘管版本完全一樣,這看起來很奇怪。

但是,由於其他原因,我現在正在接收不同的錯誤。我應該將它作爲一個不同的問題發佈,並自己回答這個問題嗎?

Started GET "/auth/facebook/callback?code=AQCLHSxZ1xmAuvfIlWNU7N3edIHOPKEeBpKQDi1cbNa6ycj3lhBYKGQTjMfYIrwvDnQCdxDtLms91yG4A4fvnjiA0Afreq_d7JooMZEXcCb_gV-k2lpWSEsgRcWJmTdFNQtxnfTIxSJYBQriRtJvPiUVuJPootNEY3-14_1F3hpIzhjf9SEQXhLSLVKboLmnKd-IdnFGlx5yKBlKFbJywIzPRCokfegKlgZGPUQ1ipn3_qDCyTdAWs2Kd-cGopnohKntV8Qk2Dq3bMfDoI8p5oJl5snNf5WgnQ281xWlIS6E2KEFY-wJil4FqWxWuaawinc&state=9a9ef8294b902212af9e096be513755843660a6c20425afd" for 127.0.0.1 at 2016-05-30 18:01:47 -0500 
Processing by DeviseTokenAuth::OmniauthCallbacksController#omniauth_success as */* 
Parameters: {"code"=>"AQCLHSxZ1xmAuvfIlWNU7N3edIHOPKEeBpKQDi1cbNa6ycj3lhBYKGQTjMfYIrwvDnQCdxDtLms91yG4A4fvnjiA0Afreq_d7JooMZEXcCb_gV-k2lpWSEsgRcWJmTdFNQtxnfTIxSJYBQriRtJvPiUVuJPootNEY3-14_1F3hpIzhjf9SEQXhLSLVKboLmnKd-IdnFGlx5yKBlKFbJywIzPRCokfegKlgZGPUQ1ipn3_qDCyTdAWs2Kd-cGopnohKntV8Qk2Dq3bMfDoI8p5oJl5snNf5WgnQ281xWlIS6E2KEFY-wJil4FqWxWuaawinc", "state"=>"9a9ef8294b902212af9e096be513755843660a6c20425afd", "provider"=>"facebook", "omniauth_callback"=>{}} 
Completed 500 Internal Server Error in 1ms (ActiveRecord: 0.0ms) 

RuntimeError (No resource_class found): 

/home/augusto/.rvm/gems/[email protected]/bundler/gems/devise_token_auth-81fc7b40998d/app/controllers/devise_token_auth/omniauth_callbacks_controller.rb:107:in `resource_class' 
/home/augusto/.rvm/gems/[email protected]/bundler/gems/devise_token_auth-81fc7b40998d/app/controllers/devise_token_auth/omniauth_callbacks_controller.rb:235:in `get_resource_from_auth_hash' 
/home/augusto/.rvm/gems/[email protected]/bundler/gems/devise_token_auth-81fc7b40998d/app/controllers/devise_token_auth/omniauth_callbacks_controller.rb:27:in `omniauth_success' 
actionpack (5.0.0.rc1) lib/action_controller/metal/basic_implicit_render.rb:4:in `send_action' 
actionpack (5.0.0.rc1) lib/abstract_controller/base.rb:181:in `process_action' 
actionpack (5.0.0.rc1) lib/action_controller/metal/rendering.rb:30:in `process_action' 
actionpack (5.0.0.rc1) lib/abstract_controller/callbacks.rb:20:in `block in process_action' 
activesupport (5.0.0.rc1) lib/active_support/callbacks.rb:126:in `call' 
activesupport (5.0.0.rc1) lib/active_support/callbacks.rb:506:in `block (2 levels) in compile' 
activesupport (5.0.0.rc1) lib/active_support/callbacks.rb:455:in `call' 
activesupport (5.0.0.rc1) lib/active_support/callbacks.rb:101:in `__run_callbacks__' 
activesupport (5.0.0.rc1) lib/active_support/callbacks.rb:750:in `_run_process_action_callbacks' 
activesupport (5.0.0.rc1) lib/active_support/callbacks.rb:90:in `run_callbacks' 
actionpack (5.0.0.rc1) lib/abstract_controller/callbacks.rb:19:in `process_action' 
actionpack (5.0.0.rc1) lib/action_controller/metal/rescue.rb:31:in `process_action' 
actionpack (5.0.0.rc1) lib/action_controller/metal/instrumentation.rb:32:in `block in process_action' 
activesupport (5.0.0.rc1) lib/active_support/notifications.rb:164:in `block in instrument' 
activesupport (5.0.0.rc1) lib/active_support/notifications/instrumenter.rb:21:in `instrument' 
activesupport (5.0.0.rc1) lib/active_support/notifications.rb:164:in `instrument' 
actionpack (5.0.0.rc1) lib/action_controller/metal/instrumentation.rb:30:in `process_action' 
actionpack (5.0.0.rc1) lib/action_controller/metal/params_wrapper.rb:248:in `process_action' 
activerecord (5.0.0.rc1) lib/active_record/railties/controller_runtime.rb:18:in `process_action' 
actionpack (5.0.0.rc1) lib/abstract_controller/base.rb:126:in `process' 
actionpack (5.0.0.rc1) lib/action_controller/metal.rb:190:in `dispatch' 
actionpack (5.0.0.rc1) lib/action_controller/metal.rb:262:in `dispatch' 
actionpack (5.0.0.rc1) lib/action_dispatch/routing/route_set.rb:50:in `dispatch' 
actionpack (5.0.0.rc1) lib/action_dispatch/routing/route_set.rb:32:in `serve' 
actionpack (5.0.0.rc1) lib/action_dispatch/routing/mapper.rb:16:in `block in <class:Constraints>' 
actionpack (5.0.0.rc1) lib/action_dispatch/routing/mapper.rb:46:in `serve' 
actionpack (5.0.0.rc1) lib/action_dispatch/journey/router.rb:39:in `block in serve' 
actionpack (5.0.0.rc1) lib/action_dispatch/journey/router.rb:26:in `each' 
actionpack (5.0.0.rc1) lib/action_dispatch/journey/router.rb:26:in `serve' 
actionpack (5.0.0.rc1) lib/action_dispatch/routing/route_set.rb:725:in `call' 
actionview (5.0.0.rc1) lib/action_view/digestor.rb:12:in `call' 
omniauth (1.3.1) lib/omniauth/strategy.rb:186:in `call!' 
omniauth (1.3.1) lib/omniauth/strategy.rb:164:in `call' 
omniauth (1.3.1) lib/omniauth/strategy.rb:186:in `call!' 
omniauth (1.3.1) lib/omniauth/strategy.rb:164:in `call' 
omniauth (1.3.1) lib/omniauth/builder.rb:63:in `call' 
rack-attack (4.4.1) lib/rack/attack.rb:100:in `call' 
rack (2.0.0.rc1) lib/rack/session/abstract/id.rb:222:in `context' 
rack (2.0.0.rc1) lib/rack/session/abstract/id.rb:216:in `call' 
actionpack (5.0.0.rc1) lib/action_dispatch/middleware/cookies.rb:613:in `call' 
warden (1.2.6) lib/warden/manager.rb:35:in `block in call' 
warden (1.2.6) lib/warden/manager.rb:34:in `catch' 
warden (1.2.6) lib/warden/manager.rb:34:in `call' 
rack (2.0.0.rc1) lib/rack/etag.rb:25:in `call' 
rack (2.0.0.rc1) lib/rack/conditional_get.rb:25:in `call' 
rack (2.0.0.rc1) lib/rack/head.rb:12:in `call' 
activerecord (5.0.0.rc1) lib/active_record/migration.rb:552:in `call' 
actionpack (5.0.0.rc1) lib/action_dispatch/middleware/callbacks.rb:38:in `block in call' 
activesupport (5.0.0.rc1) lib/active_support/callbacks.rb:97:in `__run_callbacks__' 
activesupport (5.0.0.rc1) lib/active_support/callbacks.rb:750:in `_run_call_callbacks' 
activesupport (5.0.0.rc1) lib/active_support/callbacks.rb:90:in `run_callbacks' 
actionpack (5.0.0.rc1) lib/action_dispatch/middleware/callbacks.rb:36:in `call' 
actionpack (5.0.0.rc1) lib/action_dispatch/middleware/executor.rb:12:in `call' 
actionpack (5.0.0.rc1) lib/action_dispatch/middleware/remote_ip.rb:79:in `call' 
actionpack (5.0.0.rc1) lib/action_dispatch/middleware/debug_exceptions.rb:49:in `call' 
actionpack (5.0.0.rc1) lib/action_dispatch/middleware/show_exceptions.rb:31:in `call' 
railties (5.0.0.rc1) lib/rails/rack/logger.rb:36:in `call_app' 
railties (5.0.0.rc1) lib/rails/rack/logger.rb:24:in `block in call' 
activesupport (5.0.0.rc1) lib/active_support/tagged_logging.rb:70:in `block in tagged' 
activesupport (5.0.0.rc1) lib/active_support/tagged_logging.rb:26:in `tagged' 
activesupport (5.0.0.rc1) lib/active_support/tagged_logging.rb:70:in `tagged' 
railties (5.0.0.rc1) lib/rails/rack/logger.rb:24:in `call' 
actionpack (5.0.0.rc1) lib/action_dispatch/middleware/request_id.rb:24:in `call' 
rack (2.0.0.rc1) lib/rack/runtime.rb:22:in `call' 
activesupport (5.0.0.rc1) lib/active_support/cache/strategy/local_cache_middleware.rb:28:in `call' 
actionpack (5.0.0.rc1) lib/action_dispatch/middleware/executor.rb:12:in `call' 
actionpack (5.0.0.rc1) lib/action_dispatch/middleware/static.rb:136:in `call' 
rack (2.0.0.rc1) lib/rack/sendfile.rb:111:in `call' 
rack-cors (0.4.0) lib/rack/cors.rb:80:in `call' 
railties (5.0.0.rc1) lib/rails/engine.rb:522:in `call' 
puma (3.4.0) lib/puma/configuration.rb:224:in `call' 
puma (3.4.0) lib/puma/server.rb:569:in `handle_request' 
puma (3.4.0) lib/puma/server.rb:406:in `process_client' 
puma (3.4.0) lib/puma/server.rb:271:in `block in run' 
puma (3.4.0) lib/puma/thread_pool.rb:114:in `block in spawn_thread' 
+0

你可以發佈你的應用程序控制器,或者控制器,它管理的認證? –

回答

1

這一具體問題

ArgumentError (Before process_action callback :set_user_by_token has not been defined) 

是由您的Gemfile

gem 'devise_token_auth', :git => 'git://github.com/lynndylanhurley/devise_token_auth.git' 

運行包更新直接指向最新devise_token_auth大師Github上固定和錯誤消失。

我後續的錯誤是一個路由問題,這是特別是我的應用程序

+1

我被downvote迷住了。這個用例當然很常見,當時的錯誤是真實的。它被更新的版本修復可能不是一個「解決方案」,但如果問題消失了,還應該發佈哪些答案? – Augusto

相關問題