我在ruby on rails應用程序中使用omniauth(omniauth-facebook)。我想知道我是否可以檢索用戶的城市,國家和性別信息。我怎樣才能帶載波的用戶個人資料照片,Ruby on Rails omniauth和carrierwave
謝謝。
我在ruby on rails應用程序中使用omniauth(omniauth-facebook)。我想知道我是否可以檢索用戶的城市,國家和性別信息。我怎樣才能帶載波的用戶個人資料照片,Ruby on Rails omniauth和carrierwave
謝謝。
使用(Carrierwave文檔)[https://github.com/carrierwaveuploader/carrierwave]作爲我的參考,您需要修改您的用戶模型以添加新字段以支持carrierwave gem功能。
通常,這意味着:
class User < ActiveRecord::Base
mount_uploader :avatar, AvatarUploader
end
但它會如果您正在使用MongoDB的而不是SQL/ActiveRecord的變化。
您可以通過在rails控制檯中初始化新對象並檢查可用字段來測試此新字段是否存在。
bundle exec rails c
u = User.new
u.(tab twice quickly to see the available options)
# You are looking for the avatar field
u.avatar
您可以從控制檯設置使用
File.open('somewhere') do |f|
u.avatar = f
end
然後最後你會,一旦你測試它,它添加到窗體域您的意見對其進行測試。你通常爲你的用戶提供一個CRUD,所以在視圖中的Create/Update表單中,你可以修改這些表單來包含一個文件表單(這個HTML不是專門用於rails的,所以你可以在你的搜索中使用HTML查找更多的信息),一旦添加,您需要修改相應的控制器以將值列入白名單,以便使用這些控制器操作保存該值。
該過程與初始生成用戶模型後向用戶對象添加其他字段的過程類似。
通常omniauth將返回一個標準答案是隻關注認證,基本符合的email
組合哈希,name/first/last
,profile_picture url
,username
等一些供應商給你的電子郵件,別人不這樣做,其他人只能提供一些如果你通過示波器專門詢問他們的話。
對於我用我的omniauth.rb以下(配置/初始化/ *內)的Facebook
provider :facebook, ENV['FB_ID'], ENV['FB_SECRET'], scope: 'public_profile, email, manage_pages, user_friends', info_fields: 'id, first_name, last_name, link, email', image_size: 'large'
這意味着,Facebook將提供給我一個電子郵件,一些基本的信息,如ID,第一名字和姓氏在響應散列(omniauth負責安排)之後,通過成功的oauth授權。它將提供的令牌也將用於管理頁面的範圍,儘管我最初並未要求任何與其相關的字段。
所以在你的情況下,你會要求city
,country
和info_fields
(通過他們的圖形瀏覽器雙重檢查你不需要額外的範圍)。
當你通過omniauth(基本上是一段代碼寫成中間件,它爲你做了oauth2流程 - 你也可以自己做),你會得到一個配置文件的圖片網址。 您需要下載該圖片。 使用carrierwave可以在控制器或模塊/類上執行此操作,方法是通過實例化已設置上傳器的列,然後執行方法.download!通過它的URL從哪裏下載:
user.avatar = AvatarUploader.new
user.avatar.download! omniauth_hash['blabla_fields']['blabla_picture_url']
這將下載遠程圖片的URL,並將其保存爲常規carrierwave附件,可以再通過模型訪問正常。