如何修复以下代码
的分配分支条件警告 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
答案 0 :(得分:0)
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
答案 1 :(得分:0)
正如您所见,twitter还提供name
see 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 Sobchuk
和OlegSobchuk
可能是两个不同的用户。
更好地保存privider
和uid
。这两个属性UNIQ。你可以使用它们像主要和其他类似帮助者(例如电子邮件)