0

我正在关注本教程:http : //railscasts.com/episodes/235-omniauth-part-1?view=asciicast 以使用 Omniauth 和 Devise 获得多个帐户以使用 Rails 3.2.12。在我使用 Twitter 进行身份验证后,它会重定向回../auth/twitter/callbackoauth 令牌作为参数,并在我的Authentication#create action说明中说,

render :text => request.env["omniauth.auth"].to_yaml

但是当页面呈现时,它会说:

TypeError

can't convert nil into String

堆栈跟踪是:

omniauth-twitter (0.0.14) lib/omniauth/strategies/twitter.rb:23:in `+'
omniauth-twitter (0.0.14) lib/omniauth/strategies/twitter.rb:23:in `block in <class:Twitter>'
omniauth (1.1.3) lib/omniauth/strategy.rb:102:in `instance_eval'
omniauth (1.1.3) lib/omniauth/strategy.rb:102:in `block in compile_stack'
omniauth (1.1.3) lib/omniauth/strategy.rb:101:in `each'
omniauth (1.1.3) lib/omniauth/strategy.rb:101:in `inject'
omniauth (1.1.3) lib/omniauth/strategy.rb:101:in `compile_stack'
(eval):7:in `info_stack'
omniauth (1.1.3) lib/omniauth/strategy.rb:315:in `info'
omniauth (1.1.3) lib/omniauth/strategy.rb:328:in `auth_hash'
omniauth (1.1.3) lib/omniauth/strategy.rb:355:in `callback_phase'
omniauth-oauth (1.0.1) lib/omniauth/strategies/oauth.rb:58:in `callback_phase'
omniauth (1.1.3) lib/omniauth/strategy.rb:219:in `callback_call'
omniauth (1.1.3) lib/omniauth/strategy.rb:175:in `call!'
omniauth (1.1.3) lib/omniauth/strategy.rb:157:in `call'
omniauth (1.1.3) lib/omniauth/builder.rb:48:in `call'
warden (1.2.1) lib/warden/manager.rb:35:in `block in call'
warden (1.2.1) lib/warden/manager.rb:34:in `catch'
warden (1.2.1) lib/warden/manager.rb:34:in `call'
actionpack (3.2.12) lib/action_dispatch/middleware/best_standards_support.rb:17:in `call'
rack (1.4.5) lib/rack/etag.rb:23:in `call'
rack (1.4.5) lib/rack/conditionalget.rb:25:in `call'
actionpack (3.2.12) lib/action_dispatch/middleware/head.rb:14:in `call'
actionpack (3.2.12) lib/action_dispatch/middleware/params_parser.rb:21:in `call'
actionpack (3.2.12) lib/action_dispatch/middleware/flash.rb:242:in `call'
rack (1.4.5) lib/rack/session/abstract/id.rb:210:in `context'
rack (1.4.5) lib/rack/session/abstract/id.rb:205:in `call'
actionpack (3.2.12) lib/action_dispatch/middleware/cookies.rb:341:in `call'
activerecord (3.2.12) lib/active_record/query_cache.rb:64:in `call'
activerecord (3.2.12) lib/active_record/connection_adapters/abstract/connection_pool.rb:479:in `call'
actionpack (3.2.12) lib/action_dispatch/middleware/callbacks.rb:28:in `block in call'
activesupport (3.2.12) lib/active_support/callbacks.rb:405:in `_run__3143814823160835356__call__2946912839493394460__callbacks'
activesupport (3.2.12) lib/active_support/callbacks.rb:405:in `__run_callback'
activesupport (3.2.12) lib/active_support/callbacks.rb:385:in `_run_call_callbacks'
activesupport (3.2.12) lib/active_support/callbacks.rb:81:in `run_callbacks'
actionpack (3.2.12) lib/action_dispatch/middleware/callbacks.rb:27:in `call'
actionpack (3.2.12) lib/action_dispatch/middleware/reloader.rb:65:in `call'
actionpack (3.2.12) lib/action_dispatch/middleware/remote_ip.rb:31:in `call'
actionpack (3.2.12) lib/action_dispatch/middleware/debug_exceptions.rb:16:in `call'
actionpack (3.2.12) lib/action_dispatch/middleware/show_exceptions.rb:56:in `call'
railties (3.2.12) lib/rails/rack/logger.rb:32:in `call_app'
railties (3.2.12) lib/rails/rack/logger.rb:16:in `block in call'
activesupport (3.2.12) lib/active_support/tagged_logging.rb:22:in `tagged'
railties (3.2.12) lib/rails/rack/logger.rb:16:in `call'
actionpack (3.2.12) lib/action_dispatch/middleware/request_id.rb:22:in `call'
rack (1.4.5) lib/rack/methodoverride.rb:21:in `call'
rack (1.4.5) lib/rack/runtime.rb:17:in `call'
activesupport (3.2.12) lib/active_support/cache/strategy/local_cache.rb:72:in `call'
rack (1.4.5) lib/rack/lock.rb:15:in `call'
actionpack (3.2.12) lib/action_dispatch/middleware/static.rb:62:in `call'
railties (3.2.12) lib/rails/engine.rb:479:in `call'
railties (3.2.12) lib/rails/application.rb:223:in `call'
rack (1.4.5) lib/rack/content_length.rb:14:in `call'
railties (3.2.12) lib/rails/rack/log_tailer.rb:17:in `call'
rack (1.4.5) lib/rack/handler/webrick.rb:59:in `service'
/Users/ashley/.rvm/rubies/ruby-1.9.3-p385/lib/ruby/1.9.1/webrick/httpserver.rb:138:in `service'
/Users/ashley/.rvm/rubies/ruby-1.9.3-p385/lib/ruby/1.9.1/webrick/httpserver.rb:94:in `run'
/Users/ashley/.rvm/rubies/ruby-1.9.3-p385/lib/ruby/1.9.1/webrick/server.rb:191:in `block in start_thread'

我能做些什么来解决这个问题?我不知道从哪里开始或出了什么问题。

4

3 回答 3

2

Rails 告诉您它没有对 ["omniauth.auth"] 的引用,因此您在 nil 对象上调用 to_yaml。这通常表明设置变量的过程由于某种原因失败。

处理这些问题的一个非常棒的方法是使用 better_errors,当 rails 遇到错误时,它会打开一个非常酷的网页和交互式控制台(不过只能在开发环境中使用!

http://railscasts.com/episodes/402-better-errors-railspanel有一个很棒的指南来做这件事。

于 2013-03-18T04:26:51.747 回答
2

我有同样的问题。通过更新omniauth-twitter gem 修复它

bundle update --source omniauth-twitter

我在这里找到了这个提示: https ://github.com/arunagw/omniauth-twitter/issues/30#issuecomment-19757839

于 2013-07-05T15:45:02.147 回答
0

通过写来试试这个,渲染:text => env["omniauth.auth"]

这将在 omniauth.auth 中返回 hashie mash 对象

于 2013-03-18T04:47:23.360 回答