fmhun/omniauth-mailchimp

NoMethodError when account type is Viewer

Closed this issue · 1 comments

When attempting to authenticate to an alternate account using multi-account support, if the account type is set to Viewer, a NoMethodError is thrown because raw_info returns an error hash.

The error:

NoMethodError - undefined method `[]' for nil:NilClass:
  omniauth-mailchimp (1.0.3) lib/omniauth/strategies/mailchimp.rb:22:in `block in <class:Mailchimp>'
  omniauth (1.2.1) lib/omniauth/strategy.rb:105:in `block in compile_stack'
  omniauth (1.2.1) lib/omniauth/strategy.rb:104:in `compile_stack'
  (eval):7:in `info_stack'
  omniauth (1.2.1) lib/omniauth/strategy.rb:321:in `info'
  omniauth (1.2.1) lib/omniauth/strategy.rb:334:in `auth_hash'
  omniauth (1.2.1) lib/omniauth/strategy.rb:361:in `callback_phase'
  omniauth-oauth2 (1.1.2) lib/omniauth/strategies/oauth2.rb:77:in `callback_phase'
  omniauth (1.2.1) lib/omniauth/strategy.rb:227:in `callback_call'
  omniauth (1.2.1) lib/omniauth/strategy.rb:184:in `call!'
  omniauth (1.2.1) lib/omniauth/strategy.rb:164:in `call'
  omniauth (1.2.1) lib/omniauth/builder.rb:59:in `call'

The value of raw_info when called at line 22 of the strategy:

{"error"=>"Only API Keys belonging to users with \"manager\", \"admin\", or \"owner\" roles may access this API.", "code"=>109}

I updated to the GitHub version of the gem and found that this has changed; now, an OAuth2::Error is thrown instead.

OAuth2::Error - API Keys belonging to users with "author" roles are not permitted to access helper/account-details:
{"status":"error","code":109,"name":"User_InvalidRole","error":"API Keys belonging to users with \"author\" roles are not permitted to access helper\/account-details"}:
  oauth2 (0.9.3) lib/oauth2/client.rb:110:in `request'
  oauth2 (0.9.3) lib/oauth2/access_token.rb:107:in `request'
  oauth2 (0.9.3) lib/oauth2/access_token.rb:114:in `get'
   () Users/user/.rvm/gems/ruby-2.0.0-p481@exitmonitor/bundler/gems/omniauth-mailchimp-239e08d3297c/lib/omniauth/strategies/mailchimp.rb:48:in `raw_info'
   () Users/user/.rvm/gems/ruby-2.0.0-p481@exitmonitor/bundler/gems/omniauth-mailchimp-239e08d3297c/lib/omniauth/strategies/mailchimp.rb:23:in `block in <class:Mailchimp>'
  omniauth (1.2.1) lib/omniauth/strategy.rb:105:in `block in compile_stack'
  omniauth (1.2.1) lib/omniauth/strategy.rb:104:in `compile_stack'
  (eval):7:in `uid_stack'
  omniauth (1.2.1) lib/omniauth/strategy.rb:317:in `uid'
  omniauth (1.2.1) lib/omniauth/strategy.rb:333:in `auth_hash'
  omniauth (1.2.1) lib/omniauth/strategy.rb:361:in `callback_phase'
  omniauth-oauth2 (1.1.2) lib/omniauth/strategies/oauth2.rb:77:in `callback_phase'
  omniauth (1.2.1) lib/omniauth/strategy.rb:227:in `callback_call'
  omniauth (1.2.1) lib/omniauth/strategy.rb:184:in `call!'
  omniauth (1.2.1) lib/omniauth/strategy.rb:164:in `call'
  omniauth (1.2.1) lib/omniauth/builder.rb:59:in `call'

I assume this is the intended behavior and so I'll close the issue. I wonder if there's a more graceful way to handle this?