加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Sorcery Gem – 为外部提供商定制user_info_ma

发布时间:2020-12-16 19:10:10 所属栏目:百科 来源:网络整理
导读:我在我的Rails 3.2应用程序上使用NoamB的 Sorcery Authentication Gem版0.7.7 我正在寻找一种可能性,我可以如何连接一个方法,该方法正在为特定的外部登录提供商(例如,facebook,twitter)进行用户信息映射. 例如,我想将提供的区域设置更改为我在数据库中使用的
我在我的Rails 3.2应用程序上使用NoamB的 Sorcery Authentication Gem版0.7.7

我正在寻找一种可能性,我可以如何连接一个方法,该方法正在为特定的外部登录提供商(例如,facebook,twitter)进行用户信息映射.

例如,我想将提供的区域设置更改为我在数据库中使用的格式,或者我想从twitter下载用户头像作为匹配过程的一部分.

默认情况下,它只能通过sorcery.rb文件:

config.facebook.user_info_mapping = {:email => "email",:first_name => "first_name",:last_name => "last_name" ...

我知道我可以在我的用户模型上使用setter方法实现这种行为,但我希望将这些内容与模型分开,并希望能够专门为每个提供程序定义它们.

这可能吗?
/
实现此类扩展映射选项的最佳方法是什么?

谢谢你的帮助!

解决方法

看起来您可以通过扩展各种Sorcery提供程序类来将此操作添加到用户信息哈希中.

例如,要使用Twitter,您可能会定义以下内容:

config.external_providers = [:twitter]

您可以将其更改为:

config.external_providers = [:TwitterWithAvatar]

现在您需要在Sorcery :: Providers下定义TwitterWithAvatar提供程序,并覆盖#get_user_hash方法:

module Sorcery
  module Providers
    class TwitterWithAvatar < Twitter
      def get_user_hash(access_token)
        user_hash = super
        user_hash.merge(
          avatar: get_avatar(user_hash[:uid]),)
      end

      private

      def get_avatar(uid)
        # Some Twitter API call
      end
    end
  end
end

现在您可以设置映射:

config.TwitterWithAvatar.user_info_mapping = {avatar: "avatar"}

或者,由于您已经在使用自定义提供程序类,因此可以将映射移动到该类中:

module Sorcery
  module Providers
    class TwitterWithAvatar < Twitter
      def user_info_mapping
        {
          avatar: "avatar",# ...
        }
      end
    end
  end
end

(我还没有尝试过运行这段代码,所以细节可能有些偏差,但是从阅读Sorcery源代码看,这看起来是正确的方向.)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读