2017-07-07 70 views
0

我在ruby on rails應用程序中使用omniauth(omniauth-facebook)。我想知道我是否可以檢索用戶的城市,國家和性別信息。我怎樣才能帶載波的用戶個人資料照片,Ruby on Rails omniauth和carrierwave

謝謝。

回答

0

使用(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查找更多的信息),一旦添加,您需要修改相應的控制器以將值列入白名單,以便使用這些控制器操作保存該值。

該過程與初始生成用戶模型後向用戶對象添加其他字段的過程類似。

0

通常omniauth將返回一個標準答案是隻關注認證,基本符合的email組合哈希,name/first/lastprofile_picture urlusername等一些供應商給你的電子郵件,別人不這樣做,其他人只能提供一些如果你通過示波器專門詢問他們的話。

對於我用我的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授權。它將提供的令牌也將用於管理頁面的範圍,儘管我最初並未要求任何與其相關的字段。

所以在你的情況下,你會要求citycountryinfo_fields(通過他們的圖形瀏覽器雙重檢查你不需要額外的範圍)。

當你通過omniauth(基本上是一段代碼寫成中間件,它爲你做了oauth2流程 - 你也可以自己做),你會得到一個配置文件的圖片網址。 您需要下載該圖片。 使用carrierwave可以在控制器或模塊/類上執行此操作,方法是通過實例化已設置上傳器的列,然後執行方法.download!通過它的URL從哪裏下載:

user.avatar = AvatarUploader.new 
user.avatar.download! omniauth_hash['blabla_fields']['blabla_picture_url'] 

這將下載遠程圖片的URL,並將其保存爲常規carrierwave附件,可以再通過模型訪問正常。