Ruby on rails 使用OAuth从Twitter获取名/姓/电子邮件

Ruby on rails 使用OAuth从Twitter获取名/姓/电子邮件,ruby-on-rails,ruby-on-rails-3,oauth,twitter-oauth,Ruby On Rails,Ruby On Rails 3,Oauth,Twitter Oauth,我使用omniauth专门允许通过facebook/google/twitter登录我的网站 我存储名字、姓氏和电子邮件。然而,当我从oauth引发TwitterAuth哈希时,我在auth哈希中只得到昵称、名称、位置、图像、描述和URL 我是否可以在我的初始值设定项中传递一个范围来获取用户的电子邮件,并将名称拆分为名、姓字段?好吧,Twitter by Design不会传递给您使用电子邮件id。这是API团队经过深思熟虑的设计决定 这里有同样的线索供你参考 Twitter不会向用户发送电子邮件

我使用omniauth专门允许通过facebook/google/twitter登录我的网站

我存储名字、姓氏和电子邮件。然而,当我从oauth引发TwitterAuth哈希时,我在auth哈希中只得到昵称、名称、位置、图像、描述和URL


我是否可以在我的初始值设定项中传递一个范围来获取用户的电子邮件,并将名称拆分为名、姓字段?

好吧,Twitter by Design不会传递给您使用电子邮件id。这是API团队经过深思熟虑的设计决定

这里有同样的线索供你参考


Twitter不会向用户发送电子邮件,因此您将无法从Twitter API获取这些信息。相反,你必须要求用户在你的注册表格上输入他们的电子邮件地址

至于将名称拆分,您可以在返回哈希后使用以下方法进行操作:

social_params ||= request.env["omniauth.auth"]
fullname = social_params["user_info"]["name"].split(' ')
first_name, last_name = fullname[0], fullname[1]
puts "first name is #{first_name} and last name is #{last_name}"

请记住,
last\u name
可能是
nil
,如果他们的名字中没有空格或没有给出姓氏。这也不考虑很多人在其他文化中有多个姓氏的事实。

< P>如果你与FB、谷歌和推特有了整合,你就需要在你的DB中有一个第一个和最后一个(如果你的UI需要它),我的例子。这是我想到的,因为有些国家的人的名字有两个以上的代币,比如:(Marco De Franca Solis)或(Marco,De Franca Solis)

//+测试用例
变量名称1=handleName(“Marco De Franca Solis”)
变量名称2=handleName(“第一个、最后一个wer”)
变量名称3=handleName(“aName”)
变量名称4=handleName(“”)
//-测试用例
handleName=函数(输入){
var n=input.indexOf(“”);
n+=input.indexOf(“,”);
var result={};
if(n<0){
result.first=输入
result.last=“”
}
否则{
arr=input.split(/[,]+/);
result.first=arr[0]
result.last=“”
如果(arr.length>1)
{
arr[0]=“”
result.last=arr.join(“”);
}
}
返回结果
}

OmniAuth将所有名称组合在一个字符串中。但是,有些人的名字不止两个,比如“约翰·克拉克·史密斯”。您可以选择以三种不同的方式处理这些问题:

(1) 名:“约翰”,姓:“史密斯”

(2) 名字:“约翰·克拉克”,姓氏:“史密斯”

(3) 名:“约翰”,姓:“克拉克·史密斯”

上面的示例假设,如果名称包含少于2个单词,则它是第一个名称。这个问题类似于php使用的

$names = explode(' ',$socialData->firstName);
$socialData->firstName=array_shift($names);
$socialData->lastName=implode(' ',$names);

请注意,姓名可能有多个姓氏,也可能有多个名字,这涉及多个姓氏,但不涉及名字。

使用当前的Twitter API是可能的获取电子邮件。你必须填写申请许可的表格。说明了该过程简单、快速

请求用户的电子邮件地址要求您的应用程序被Twitter列入白名单。要请求访问,请使用此表单

一旦列入白名单,“向用户请求电子邮件地址”复选框将在apps.twitter.com上的应用权限下可用。隐私政策URL和服务条款URL字段也将在电子邮件访问所需的设置下可用。如果启用,将通过oauth/授权对话框通知用户您的应用程序可以访问他们的电子邮件地址


多谢各位。我不太确定如何处理回拨后询问电子邮件地址的问题-我对rails非常陌生,目前只需让会话create action一次性处理,无需用户交互。这可能是另一个问题。不幸的是,Twitter强迫你在注册过程中使用一个额外的步骤,即不提供电子邮件地址。你必须将用户重定向到一个注册表单,询问他们的电子邮件地址,或者使用另一个注册服务,如Facebook,它提供电子邮件地址,如果你希望它是无缝的。是的-目前我正在使用Facebook和谷歌-我可能会因此而放弃Twitter。你可以稍后通过检查添加它如果社交参数[“提供者”]=“推特”,并在必要时重定向到注册表单。太棒了!谢谢你的提示@iwasrobed!谢谢-我应该搜索得更好:/
  def first_name
    if name.split.count > 1
      name.split.first
    else
      name
    end
  end

  def last_name
    if name.split.count > 1
      name.split.last
    end
  end
  def first_name
    if name.split.count > 1
      name.split[0..-2].join(' ')
    else
      name
    end
  end

  def last_name
    if name.split.count > 1
      name.split.last
    end
  end
  def first_name
    name.split.first
  end

  def last_name
    if name.split.count > 1
      name.split[1..-1].join(' ')
    end
  end
$names = explode(' ',$socialData->firstName);
$socialData->firstName=array_shift($names);
$socialData->lastName=implode(' ',$names);