簡體   English   中英

使用omniauth-twitter gem,TypeError“無法將nil轉換為String”

[英]TypeError “can't convert nil into String” with omniauth-twitter gem

我正在使用Rails 3.2.1 omniauth-twitter(0.0.9)

但是在Twitter回調階段,我收到此錯誤:

TypeError "can't convert nil into String"

> omniauth-twitter (0.0.9) lib/omniauth/strategies/twitter.rb:22:in `+'
omniauth-twitter (0.0.9) lib/omniauth/strategies/twitter.rb:22:in `block in <class:Twitter>'
omniauth (1.1.4) lib/omniauth/strategy.rb:106:in `instance_eval'
omniauth (1.1.4) lib/omniauth/strategy.rb:106:in `block in compile_stack'
omniauth (1.1.4) lib/omniauth/strategy.rb:105:in `each'
omniauth (1.1.4) lib/omniauth/strategy.rb:105:in `inject'
omniauth (1.1.4) lib/omniauth/strategy.rb:105:in `compile_stack'
(eval):7:in `info_stack'
omniauth (1.1.4) lib/omniauth/strategy.rb:322:in `info'
omniauth (1.1.4) lib/omniauth/strategy.rb:335:in `auth_hash'
omniauth (1.1.4) lib/omniauth/strategy.rb:362:in `callback_phase'
omniauth-oauth (1.0.1) lib/omniauth/strategies/oauth.rb:58:in `callback_phase'
omniauth (1.1.4) lib/omniauth/strategy.rb:226:in `callback_call'
omniauth (1.1.4) lib/omniauth/strategy.rb:182:in `call!'
omniauth (1.1.4) lib/omniauth/strategy.rb:164:in `call'
omniauth (1.1.4) lib/omniauth/strategy.rb:184:in `call!'
omniauth (1.1.4) lib/omniauth/strategy.rb:164:in `call'
omniauth (1.1.4) lib/omniauth/builder.rb:49:in `call'

在下面添加twitter.rb代碼:

> require 'omniauth-oauth'
require 'multi_json'

module OmniAuth
  module Strategies
    class Twitter < OmniAuth::Strategies::OAuth
      option :name, 'twitter'
      option :client_options, {:authorize_path => '/oauth/authenticate',
                               :site => 'https://api.twitter.com'}

      uid { access_token.params[:user_id] }

      info do
        {
          :nickname => raw_info['screen_name'],
          :name => raw_info['name'],
          :location => raw_info['location'],
          :image => raw_info['profile_image_url'],
          :description => raw_info['description'],
          :urls => {
            'Website' => raw_info['url'],
            'Twitter' => 'http://twitter.com/' + raw_info['screen_name'], # 22 line no
          }
        }
      end

      extra do
        { :raw_info => raw_info }
      end

      def raw_info
        @raw_info ||= MultiJson.decode(access_token.get('/1/account/verify_credentials.json').body)
      rescue ::Errno::ETIMEDOUT
        raise ::Timeout::Error
      end

      alias :old_request_phase :request_phase

      def request_phase 
        screen_name = session['omniauth.params']['screen_name']
        if screen_name && !screen_name.empty?
          options[:authorize_params] ||= {}
          options[:authorize_params].merge!(:force_login => 'true', :screen_name => screen_name)
        end
        old_request_phase
      end


    end
  end
end

我已經更新了omniauth-twitter gem,它保持與上述相同的版本。

可能是什么原因?

這是因為raw_info['screen_name']值為nil,並且您無法將其與字符串連接。

'http://twitter.com/' + raw_info['screen_name'], # 22 line no替換為

"http://twitter.com/#{raw_info['screen_name']}", 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM