2012-03-26 53 views
1

我正在使用omniauth与LinkedIn作为提供商。 LinkedIn不提供 电子邮件信息哈希,所以我不能提供电子邮件时创建基于我回来的信息 用户。使用Linkedin的Omnoauth登录不提供电子邮件信息哈希

两个相关的问题:

1)我怎样才能调整设计,使得没有一个要求 :电子邮件作为验证?它似乎不在 用户模型下设置。

2)我确实想获取电子邮件信息,但是,想要在创建用户之前请求 电子邮件信息。我如何 重定向到一个页面/向导询问电子邮件信息,然后 回来完成用户注册?

回答

0

看看关于omniauth的railscasts:http://railscasts.com/episodes?utf8=%E2%9C%93&search=omniauth

的想法是这样的:

  • 从omniauth信息
  • 创建一个新用户尝试保存用户
  • 自电子邮件不存在它不会验证
  • 在会话中存储omniauth数据和redirect_to new_user_registration_url
  • 创建自己的注册控制器,其从所述色器件能继承一个
  • 倍率的build_resource(*args)方法,并且如果omniauth数据存在时,用它(在你的情况下的用户)创建的资源

这样,在尝试使用linkedin登录后,用户将被重定向到可以输入他的电子邮件的表单。

这一切都在railscast解释;)

+0

谢谢你的回答,但你有什么我可以参考的例子。我无法在rails上找到投射视频,你可以建议这个网址吗? – 2012-03-29 07:50:42

+0

我认为这是在这个:http://railscasts.com/episodes/236-omniauth-part-2。您的问题并非直接存在于我的想法中,但它处理登录或电子邮件已被占用的情况。这与电子邮件丢失的原理完全相同。 – Robin 2012-03-29 14:52:11

+0

是的,谢谢它会有所帮助。 – 2012-03-29 15:22:32

1

我只是解决了这个无需使用单独的“LinkedIn”的宝石,这是非常困难的,因为有一个明显缺乏关于这个问题的文件!

首先,您需要通过将字段选项添加到LinkedIn Omniauth配置来使电子邮件地址可用,您还需要覆盖request_token_path以添加检索用户电子邮件地址所需的r_emailaddress范围。

矿山结束了看起来像这样(NB红宝石1.9.3。):

provider :linkedin, external_services['linkedin']['api_key'], external_services['linkedin']['api_secret'], client_options: {request_token_path: '/uas/oauth/requestToken?scope=r_emailaddress'}, fields: ['id', 'first-name', 'last-name', 'headline', 'industry', 'picture-url', 'public-profile-url', 'email-address'] 

注意:不要忘记更改external_services [ 'LinkedIn'] [ 'API_KEY']和external_services ['LinkedIn '] ['api_secret']给你自己。

您的用户将被要求授权使用他们的电子邮件地址,以及他们的基本提供,你将有机会获得它一旦被通过返回:

auth['extra']['raw_info']['emailAddress'] 

我也许应该犯这种变化回到omniauth-linkedin,这样你就可以简单地在提供者选项中设置scope:r_emailaddress,避免重复字段名称并将电子邮件返回到auth对象的info部分。

如果我在我的项目的这一部分完成后得到时间,我会的。