首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails + Sorcery:向现有用户添加外部身份验证

Rails + Sorcery:向现有用户添加外部身份验证
EN

Stack Overflow用户
提问于 2012-04-30 11:45:28
回答 2查看 1.1K关注 0票数 2

我正在Rails应用程序中使用Sorcery进行身份验证。我有它的设置很好,我可以添加用户的用户名/密码或通过外部身份验证(目前只使用twitter )。然而,有一件事我还没有弄清楚,那就是如何向现有用户添加身份验证,即。由username创建的用户,该用户可能希望在以后添加其twitter帐户作为登录方式。

我尝试向外部模块添加一个方法来启用此功能...

代码语言:javascript
复制
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而不是provider。

在Sorcery中没有用于此的公共方法。有没有人想出了如何将这一功能嵌入到应用程序中?

EN

回答 2

Stack Overflow用户

发布于 2012-05-10 04:52:26

我最近使用https://github.com/rcarter/sorcery添加了将提供者链接到已通过身份验证的用户的功能。这能做你想要的吗?

我应该警告你,它试图将access_token存储在你的用户模型中……你可能想要删除它。请在此处查看更改:https://github.com/rcarter/sorcery/commit/f3984749659bceb7f7438cae8ea95ba5a415d1e2

票数 0
EN

Stack Overflow用户

发布于 2020-08-30 15:23:35

这是一个非常老的问题,但我只是想添加我的解决方案,以实现这一点与微软的is。我需要让用户使用Microsoft SSO登录。我希望能够创建用户帐户,并将其设置为使用其Microsoft凭据登录。我使用的是Ruby 2.7,rails 5.1和Sorcery 0.15。我使用了sorcery wiki中的外部提供程序示例代码从https://github.com/Sorcery/sorcery/wiki/External开始

在Azure Active Directory端:

  1. 将您的web应用程序添加为已注册的用户.csv,并使用该信息在您的用户表中创建您的用户配置文件。他们的电子邮件将是他们的username.
  2. Create,这是Azure中你注册的应用下的客户端机密。
  3. 为你的应用(如http://localhost:32795/oauth/callback?provider=microsoft

)添加网络重定向URI

在你的应用中:

  1. 在身份验证表中创建用户的身份验证条目。每个用户都将从Users表中获得他们的uid,他们的uid是下载的.csv文件中的"id“(在Azure中,这是他们的对象ID),并且提供者在

中为MSFT回调和外部提供者提供了一条路由

app/config/initializers/sorcery.rb

代码语言:javascript
复制
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,该URI将通知你的应用程序也要注销。或者,你可以设置你的应用程序在你注销时清除办公室的cookies。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10378227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档