什么是omniauth和电子邮件密码注册最佳实践?

结合Facebook登录(让我说我会使用Omniauth gem)和电子邮件+密码登录的最佳做法是什么?

我看了几个博客,看过Railscasts,我知道每个人都在使用Omnia的Devise gem。 但我正在寻找一些不同的观点。

子问题:

我正在考虑从头开始创建电子邮件+密码注册(不使用任何gem,让它保持快速和轻便)所以你有什么建议吗? 或者,如果你有特定的gem,请让它快速。

你对Oauth2gem(替代Omniauth)处理Facebook的身份validation有什么其他建议吗?

对不起,我在这里问这个基本问题,但我没有找到很多答案(我发现其中大部分是基于Devise)

这就是我在Web上的大多数示例中看到它的方式

auth_with_devise_and_ominauth

基本上,当您使用电子邮件+密码注册时,您将直接创建行到用户模型(不接触validation模型)和注册Omniauth时,而不是创建与用户模型通信的新身份validation。

基本上在下次登录时你会做这样的事情:

if (user.password == 'xxx') login elsif user.authentication.uid == 'xxx' login else 'hello signup !' end 

因此,你在2个模型之间进行切换,并强奸(对于这个术语而言),用户模型女巫应该只持有用户信息

在某种程度上,我认为解决方案是正确的 (根据我的经验和与同事的讨论,但我仍然不能100%确定这是正确的答案)

在此处输入图像描述

正如你所看到的那样,即使用户+密码也会通过认证。 model,这意味着站点用户+密码本身就是一个提供者

所以要绝对正确它应该是这样的 在此处输入图像描述

  • 方案1

注册FB :将FB uid和authKey保存到认证表,然后创建用户

  • 方案2

使用密码注册:在AppPass表中创建新行,然后在Authentication表中创建行(作为对提供者女巫的访问权限实际上是您的应用)并且您创建用户

为什么?

因为现在当用户登录时,总是要通过认证。 模型,不在2个模型之间制作条件(认证和用户模型)

现在有人可以告诉我,……这是一个很好的方法:D?

Intridea提供电子邮件和密码策略以实现此目的: https : //github.com/intridea/omniauth-identity

🙂

Omniauth很棒,所以您应该将其用于任何/所有社交媒体登录。

至于设置自己的身份validation,这应该不会太难。 Ryan Bates有一个很棒的截屏video: 从头开始validation

这是一篇非常好的omniauth文章(你必须将它改编为你自己的用户表,但它仍然是一个很好的资源) Omniauth轨道隆隆声 。 请注意,我认为文章作者在此处使用了错误上下文中的授权一词。 Omniauth与授权无关,只与身份validation有关,这是一个微妙但非常重要的区别。

这里是最流行的身份validationgem的ruby工具箱页面的链接: http : //ruby-toolbox.com/categories/rails_authentication.html 。 您可能无法使用任何解决方案立即找到您正在寻找的确切function。

我不认为你对不同的表有不同的认证方法是正确的,这会给模型带来太大的压力(也许是一个更好的术语)。

在我看来,如果每个人都在使用设计这样做,那么就有理由这样做。 通过自己编写一些缩小的东西,你可能会获得更好的表现,但这是一项重要的投资。 我的猜测是,在您自己编写内容的时候,您的应用程序中的小性能提升并不值得。

如果您正在处理当前项目,其中有数千个并发用户难以扩展,请忽略我的建议,因为我不熟悉这些类型的问题。

我有点深入研究这些问题并对自己做了一些研究,这些都是结论。

问题是我正在尝试将我的身份validationfunction与站点登录/注册function结合起来,这是两种不同的行为。 在使用omniauth的FB注册结束时,您将在身份validation表中拥有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 

当您注册电子邮件/密码解决方案时,您正在编写在您的站点上定义用户的信息。 (身份validation仅指向用户)如果我们想通过身份validation表进行密码注册,我们必须将用户名和密码存储在身份validation表中,这样就可以将用户模型和身份validation合并到一个模型中。 这将是更加丑陋的解决方案,而不是讨论如何将多行存储到一个用户的问题。 此外,您认证或Oauth是“通过其他网站访问您的应用程序”的同义词(观看这些oauth2video,如果你无法想象它http://www.youtube.com/view_play_list?p … 0139F609),但正常登录你是直接访问该网站。

解决此问题的唯一方法是制作一个小应用程序,它将处理电子邮件/密码或用户/密码注册,生成密码提供程序UID,并将这些数据写入Users表,而不是我们的主应用程序,我们将通过omniauth请求访问miniapp并将UID存储在身份validation表中。

http://eq8scrapbook.heroku.com/equivalents_article/on_omniauth_and_password_login_best_practice