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

equ*_*nt8 4 ruby ruby-on-rails authlogic devise omniauth

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

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

子问题:

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

你对Oauth2宝石(替代Omniauth)处理Facebook的身份验证有什么其他建议吗?

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

equ*_*nt8 6

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

auth_with_devise_and_ominauth

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

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

 if (user.password == 'xxx')
    login
 elsif user.authentication.uid == 'xxx'
    login
 else
    'hello signup !'
 end
Run Code Online (Sandbox Code Playgroud)

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

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

在此输入图像描述

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

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

  • 方案1

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

  • 方案2

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

为什么?

因为现在当用户登录时,总是会通过Authent.模型,在2个模型之间没有条件(认证和用户模型)

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