2012-03-26 55 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部分。

如果我在我的項目的這一部分完成後得到時間,我會的。