添加模型关注 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'] 传递给它。