我在Rails应用程序中使用Sorcery进行身份验证。我设置得很好,我可以通过用户名/密码或外部auth添加用户(目前仅使用twitter)。但是,我无法弄清楚的一件事是如何向现有用户添加身份验证,即。由用户名创建的用户,可能希望稍后将其Twitter帐户添加为登录方式。
我尝试在External模块中添加一个方法来启用此功能......
module Sorcery
module Controller
module Submodules
module External
module InstanceMethods
protected
def add_provider_to_user(provider)
provider_name = provider.to_sym
provider = Config.send(provider_name)
user_hash = provider.get_user_hash
config = user_class.sorcery_config
user = current_user.send(config.authentications_class.to_s.downcase.pluralize).build(config.provider_uid_attribute_name => user_hash[:uid], config.provider_attribute_name => provider)
user.save(:validate => false)
return user
end
end
end
end
end
end
......但那没用。我似乎无法使Config类的行为与内部方法一样,Config.send('twitter')
总是返回nil而不是提供者。
在巫术中没有公开的方法。有没有人想出如何将这个功能修补到应用程序中?
答案 0 :(得分:0)
我最近使用https://github.com/rcarter/sorcery添加了将提供程序链接到已经过身份验证的用户的功能。这会做你想要的吗?
我应该警告,虽然它试图在你的用户模型中存储access_token ...你可能想删除它。请在此处查看更改:https://github.com/rcarter/sorcery/commit/f3984749659bceb7f7438cae8ea95ba5a415d1e2
答案 1 :(得分:0)
这是一个非常老的问题,但是我只是想添加使用Microsoft ID进行此操作的解决方案。我需要让用户使用Microsoft SSO登录。我希望能够创建用户帐户并将其设置为使用其Microsoft凭据登录。我正在使用Ruby 2.7,Rails 5.1和Sorcery 0.15。我使用了巫术Wiki中的外部提供程序示例代码,以https://github.com/Sorcery/sorcery/wiki/External
开头在Azure Active Directory端:
http://localhost:32795/oauth/callback?provider=microsoft
在您的应用中:
microsoft
。get "/oauth/callback/microsoft" => "oauths#callback" # for microsoft
添加一条路由app / config / initializers / sorcery.rb
config.microsoft.key = <your Application(client)ID>
config.microsoft.secret = <client secret you generated in Azure>
config.microsoft.callback_url = "http://localhost:3000/oauth/callback?provider=microsoft"
config.microsoft.user_info_mapping = {:email => "userPrincipalName", :username => "userPrincipalName"}
config.microsoft.scope = "openid email https://graph.microsoft.com/User.Read"
您的应用程序现在将使用MSFT ID进行登录。请注意,即使您退出应用程序,单击链接以使用MSFT登录时,它也会自动登录,因为您的MSFT凭据是由浏览器保存的。如果您转到MSFT帐户并注销,则需要在Azure中设置一个注销URI,这将告诉您的应用程序也要注销。或者,您可以设置应用程序以在注销时摆脱办公室的cookie。