我正在编写一个Rails 3.1应用程序,使用Clearance进行身份验证。我想添加标准的Facebook身份验证:允许用户直接(使用Clearance)或通过FB继续向我们注册/验证;如果他们通过FB登录/注册,并且我们已经有了相关电子邮件地址的帐户,则合并帐户。
有很好的文档可以使用OmniAuth/Devise,但我还没有找到类似的Clearance文档。有没有(积极维护的)gem可以在这里提供帮助,或者仅仅是教程?到目前为止,我发现最好的是BlueLightSpecial,但无论是它还是它用于FB Connect的gem似乎都不再积极维护了。
发布于 2012-02-17 03:43:47
Devise/OmniAuth的好处是它与其他API (Twitter、Facebook等)无缝集成。
您可以尝试使用现有的gem来炮制自己的自定义集成与Clearance。例如:https://github.com/nsanta/fbgraph (尽管这个gem已经有一段时间没有维护过了)。仍然工作得很好。
还有考拉https://github.com/arsduo/koala -使用OAuth身份验证和Facebook Graph API。
发布于 2012-04-16 03:37:50
我最终编写了this solution -将其发布在这里,以防它可以帮助其他人(或者其他人有改进它的建议)。
下面是一些逻辑:
该应用程序最初是为身份验证/授权提供许可的,因此坚持使用许可可以让现有的名称/pwds和现有的授权码继续工作。
用户标识
Clearance使用电子邮件地址作为主要标识符。应用程序需要每个用户都有一个用于其他目的的电子邮件地址,所以我们将继续使用电子邮件作为主要用户id。当用户注册时,如果他们通过FB注册,我们从FB获取它。(请注意,omniauth-facebook请求一组可配置的FB权限;默认情况下包含对电子邮件地址的访问权限)。
用户注册
新用户可以选择创建电子邮件/密码组合,或通过FB注册。Omniauth-facebook用于针对FB进行身份验证(并允许随着时间的推移扩展到其他身份验证系统)。我们从FB获取用户数据(姓名、电子邮件等),外加一个Facebook身份验证令牌。以这种方式进行身份验证的用户不需要提供密码。选择在没有FB的情况下注册的用户提供电子邮件地址、密码和其他用户数据。由FB登录创建的用户被带到user/edit,以完成提供我们无法从FB获取的任何配置文件详细信息。我们还保留了现有的用户注册机制,允许用户手动提供电子邮件/密码/其他详细信息。
用户验证
清除验证用户的电子邮件地址。我们被覆盖的password_optional?函数本质上绕过了他们的密码验证。对于生产用途,此解决方案应包括用户验证,以实现“您必须拥有有效的pwd或有效的omniauth证书中的至少一个”
会话创建
使用Clearance的会话模型(将remember_token存储在cookie中)。
重写会话控制器以添加用于通过FB进行签名的方法。从FB回调路由到此方法,该方法创建/更新用户的身份验证数据并调用Clearance的sign_in(user)
Authorization
Clearance的简单模型被保留下来:“authorize”过滤器本质上只是检查一个有效的用户是否已经登录,并提供了一个current_user助手。
FB usage
用户的FB令牌在FB身份验证之后存储(在belongs_to用户的身份验证对象中)。Koala用于其他FB请求(例如,发布到用户的墙上)这里省略了...details;我没有做任何特殊的事情。
FB令牌刷新
FB令牌定期过期(并且FB的“离线访问”角色已被弃用)。令牌在用户登录时刷新,但令牌可能在应用程序会话到期前失效(当用户注销FB、更改其FB密码或令牌过期时)。我正在研究如何在登录流程之外定期更新FB令牌,但这似乎超出了这个答案的范围。
https://stackoverflow.com/questions/7668093
复制相似问题