新增模型關注 omniauth 屬性 concern.rb

module OmniauthAttributesConcern
    extend ActiveSupport::Concern
    module ClassMethods
        Add Methods here 
    end
end

在這個問題中,我們可以為每個社交媒體建立方法來獲取和儲存屬性。

def twitter params
  (params['info']['email'] = "dummy#{SecureRandom.hex(10)}@dummy.com") if params['info']['email'].blank?
  attributes = {
                 email: params['info']['email'],
                 first_name: params['info']['name'].split(' ').first,
                 last_name: params['info']['name'].split(' ').last,
                 username: params['info']['nickname'],
                 password: Devise.friendly_token
               }
  create(attributes)
end

注意:如果使用者在 Twitter 上確認了他/她的電子郵件,則 Twitter 僅返回電子郵件地址; 否則返回 nil 值。

  • 我們可以像上面新增 Twitter 一樣新增其他社交媒體帳戶。

  • 來自社交媒體帳戶的個人資料影象也可以被提取,並將作為傳遞

    remote_image_url: params['info']['image']
    

    注意:上面的示例適用於 CarrierWave gem,而 remote_image_url 中的'image'是 DB 列。你可以使用任何其他寶石並將 params['info']['image'] 傳遞給它。