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源代码看,这看起来是正确的方向.) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |