我使用Devise和OAuth将社交登录(Facebook,Twitter等)与Rails应用程序集成在一起。请求和回调都运行良好,用户可以对应用程序进行身份验证并有效登录。
我的问题是:
使用Devise,我的网站将用户的电子邮件地址作为用户名。因此,无论何时用户首次通过社交网站登录,都会为其帐户存储“连接”记录,以显示他们已登录的社交网站。如果他们的网站上还没有帐户,则会使用回调数组中的电子邮件地址创建一个帐户。然后将连接与返回的令牌和秘密一起存储以供以后使用(FB帖子,推文等)。
不幸的是,Twitter没有提供电子邮件地址。为了避免这种情况,我要求首次使用Twitter登录的用户只需提供一个电子邮件地址,即可创建一个帐户。但是,如果他们已在我的网站上拥有一个帐户,我无法弄明白该怎么办。我无法检查他们是否已经这样做,因为我没有给出匹配的电子邮件地址。这最终可能导致用户拥有多个帐户。
所以,我有点不知所措,如果有人有任何建议,那将非常有帮助。 谢谢! :)
答案 0 :(得分:0)
您还需要将一些oauth提供商信息(例如{provider,twitter identifier})存储到您的数据库中,然后根据该信息而不是电子邮件ID检查twitter oauths。
最简单的做法是添加一个略有不同的流程,如果登录是通过Twitter。首次向Twitter登录用户询问电子邮件ID。在users表中,添加一个名为tw_id的列,并添加用户的twitter标识符。下次,如果通过Twitter登录,则检查tw_id而不是提供商电子邮件,然后继续执行正常的应用程序流程。