【问题标题】:Assignment Branch Condition size for from_omniauth is too highfrom_omniauth 的分配分支条件大小太高
【发布时间】:2016-01-05 10:25:25
【问题描述】:

如何修复以下代码的分配分支条件警告

      def self.from_omniauth(ominiauth_data)
        data = ominiauth_data.info
        if data['email'].present?
          user = User.where(email: data['email']).try(:last)
        else
          if ominiauth_data['provider'] == 'twitter'
            uname = ominiauth_data.info['nickname'].delete(' ')
          elsif ominiauth_data['provider'] == 'facebook'
            uname = ominiauth_data.info['name'].delete(' ')
          elsif ominiauth_data['provider'] == 'google_oauth2'
            uname = ominiauth_data.info['name'].delete(' ')
          end
          user = User.where(username: uname).try(:last)
        end
     end

【问题讨论】:

    标签: ruby ruby-on-rails-4


    【解决方案1】:
      def self.from_omniauth(ominiauth_data)
        if ominiauth_data.info['email'].present?
          user = User.where(email: data['email']).try(:last)
        else
          uname = case ominiauth_data['provider']
                  when 'twitter' then ominiauth_data.info['nickname'].delete(' ')
                  when 'facebook' then ominiauth_data.info['name'].delete(' ')
                  when 'google_oauth2' then ominiauth_data.info['name'].delete(' ')
                  end
          user = User.where(username: uname).try(:last)
        end
     end
    

    或者,甚至更好:

      def self.from_omniauth(ominiauth_data)
        if ominiauth_data.info['email'].present?
          user = User.where(email: data['email']).try(:last)
        else
          uname = ominiauth_data.info[
                    case ominiauth_data['provider']
                    when 'twitter' then 'nickname'
                    when 'facebook' then 'name'
                    when 'google_oauth2' then 'name'
                    end
                  ].delete(' ')
          user = User.where(username: uname).try(:last)
        end
     end
    

    【讨论】:

      【解决方案2】:

      如你所见,推特还提供了namesee hear

      (和nickname 已经没有空格了!!!)

      所以你可以用下面的方式编写你的代码:

      def self.from_omniauth(ominiauth_data)
          data = ominiauth_data.info
          if data['email'].present?
            user = User.where(email: data['email']).try(:last)
            # if you have uniq user than use
            # user = User.find_by(email: data['email'])
          else
            uname = data.info['nickname'].delete(' ')
            user = User.where(username: uname).try(:last)
            # if you have uniq user than use
            # user = User.find_by(username: uname)
          end
       end
      

      编辑

      顺便说一句 更改原始用户名的坏主意,为什么? 例如: Twitter 不提供电子邮件,您可以通过名称识别用户。但是Oleg SobchukOlegSobchuk可能是两个不同的用户。

      保存privideruid 的更好方法。这两个属性UNIQ。您可以像使用专业和其他类似的助手(例如电子邮件)一样使用它们

      【讨论】:

        猜你喜欢
        • 2020-05-22
        • 1970-01-01
        • 2016-04-13
        • 2019-10-17
        • 2021-06-16
        • 2023-04-07
        • 2015-09-05
        • 2022-06-20
        • 1970-01-01
        相关资源
        最近更新 更多