什么是omniauth和电子邮件密码注册的最佳做法?
将Facebook登录(假设我将使用Omniauth gem)和电子邮件+密码登录的最佳做法是什么?什么是omniauth和电子邮件密码注册的最佳做法?
我看到一些博客,看到了Railscasts,我知道每个人都在用Omniauth使用Devise gem。但我正在寻找一些不同的观点。
子问题:
我正在考虑创建电子邮件+从头密码注册(不使用这方面的任何宝石,让我们保持它的快,重量轻),所以你有这方面的任何建议吗?或者如果你有特别的宝石,请让它快速。
您是否有任何其他建议Oauth2宝石(替代Omniauth)处理验证到Facebook?
对不起,我在这里问这个基本的问题,但我没有找到很多答案(其中大部分我发现是基于设计)
这是我看到它在大多数例子,当你用电子邮件+密码,要创建行直接向用户模式(不接触AUTHENT立即登记完成在网络上
basicly 。模型)以及在使用Omniauth注册时,比创建与用户模型通信的新身份验证更有用。
而且basicly在下次登录时,你正在做的事情是这样的:
if (user.password == 'xxx')
login
elsif user.authentication.uid == 'xxx'
login
else
'hello signup !'
end
所以你2种型号之间swiching和强奸(有关术语抱歉)用户模型女巫应该持有用户信息
的解决方案,在某种程度上,我认为是正确的(从我的经验和我的同事们讨论,但我仍然不是100%肯定这是一个正确的答案)
正如你所看到的,甚至用户+密码正在通过Authentic。模型,这意味着该网站用户+密码作为自身
所以是是绝对正确的,应该是这样的
- 场景1
签约供应商用FB:将FB uid和authKey保存到认证表中,然后创建用户
- 方案2
签署了密码:你AppPass表中创建新行,然后你在认证表中创建行(作为供应商巫婆访问实际上是你的应用程序)和比你创建用户
为什么?
因为现在当用户登录时,始终会通过Authentic。模型,没有使条件之间2模型(验证和用户模型)
现在任何人都可以请告诉我,...这是一个好方法:D?
这是对Intridea用OmniAuth身份所做的很好的描述。 – sizzle
我完全同意你的看法。我得出了完全相同的结论,并认为我会搜索互联网,看看我是孤身一人,还是认为共识有争议......实际上,omi-identity的自述文件中的一行代表了同样的事实:“身份模型应该与您的用户模型相关联,为您提供最大的灵活性,以包含其他身份验证策略“ – charlysisto
几年前,我曾经写过这篇Q/A,当时我是一位经验不足的开发人员,我仍然同意答案,我很高兴其他人也有同样的观点在它:) – equivalent8
Omniauth是很大的,所以你应该使用对于任何/所有社交媒体登录。
至于设置自己的身份验证,这应该不会太难。 Ryan Bates对此有一个很好的截屏:Authentication from scratch
这是一篇不错的omniauth文章(你将不得不适应它到你自己的用户表,但它仍然是一个很好的资源)Omniauth rails rumble。请注意,我认为这篇文章的作者在这里使用了错误背景下的授权这个术语。 Omniauth与授权无关,只有身份验证,这是一个微妙但非常重要的区别。
thanx来回答,但这不是我要找的。我以前都在写这两篇文章,但他们谈论的是两件不同的事情,而不是如何将这两种方法结合起来(这意味着通过oauth身份验证来创建身份验证+密码注册)。我会在下一个答案中更深入地解释自己... – equivalent8
没问题。我过去处理此事的方式是从头开始创建认证(带有password_hash,电子邮件等的用户模型),然后每个用户拥有多个认证。使用此功能,用户可以同时拥有登录/密码和登录第三方登录。 – Msencenb
下面是最流行的身份验证宝石的红宝石工具箱页面的链接:http://ruby-toolbox.com/categories/rails_authentication.html。使用任何解决方案时,您可能都无法找到您正在寻找的确切功能。
我不认为你是正确的,有不同的认证方法去不同的表格会放在模型上太多的压力(也许是一个更好的术语)。
在我看来,如果每个人都在使用设计,这是有原因的。你可以通过写一些自己缩小的东西来获得更好的表现,但这是一个很大的时间投入。我的猜测是,应用程序中性能的小幅提升并不值得你花时间写点东西。
如果您正在开发一个当前项目,其中有成千上万的并发用户难以扩展,请忽略我的建议,因为我不熟悉这些类型的问题。
我有点深入研究这些有问题的问题,我自己做了一些研究,这些都是结论。
问题是,我试图结合我的身份验证功能与网站登录/注册功能,女巫是两种不同的行为。在使用omniauth进行FB注册后,您将在身份验证表中查找Facebook的uid,这就是下次登录FB所需的全部内容(当然,您还可以存储其他信息(如电子邮件)......但逻辑上他们更多的用户属性,应该去用户表)。
note: its ok to store user information from provider, in Authentication table,
but if you want to work with them you should copy these informations to Users table
当您使用电子邮件/密码解决方案签约,你写上您的网站定义的用户信息。 (身份验证只是指向用户)如果我们想要通过身份验证表进行密码注册,我们必须在身份验证表中存储用户名&密码,并且这种方式将用户模型和身份验证合并到一个模型中。这将是更丑陋的解决方案,而不是讨论如何将多行存储到一个用户的问题。此外,您的身份验证或Oauth是“通过其他网站访问您的应用程序”的同义词(如果您无法想象它,请观看这些oauth2视频http://www.youtube.com/view_play_list?p ... 0139F609),但通过正常登录您直接访问网站。
解决此问题的唯一方法是制作一个小应用程序,它将处理电子邮件/密码或用户/密码注册,生成密码提供程序UID,并将这些数据写入用户表,并且与我们的主要应用程序相比,我们将请求通过omniauth访问miniapp并将UID存储在认证表中。
http://eq8scrapbook.heroku.com/equivalents_article/on_omniauth_and_password_login_best_practice
有一个单独的表的关键好处是允许多个提供商。 您可以简单地将provider和uid存储在认证表中,并将其他所有内容存储在用户表中。 这并不是那么丑陋。您只需通过当前用户构建身份验证,然后保存该用户。使用oauth的整个概念和实践,连接必要的部分,以及处理各种登录/注销以及先前已认证或不认证的情况都是一个更大的难题。 – ahnbizcad
是否有你不希望使用设计的一个原因? – Solomon
根据我的经验,如果你在一个项目中有太多的宝石,项目开始放慢速度,但更具体地说,我不是行动的设计太重了,但我正在寻找更简单的功能更轻的宝石我需要 – equivalent8