我正在Ruby on Rails中创建一个应用程序,并研究Devise,Omniauth,并创建我自己的自定义版本。
我的问题是:您使用上述三种选择之一的场景是什么?
我的看法: - Omniauth可以通过第三方API提供快速注册,但需要其他权限才能访问其他数据 - Devise提供核心功能,也可根据应用需求进行定制 - 自定义可能适用于目前我不需要的极端情况
**我倾向于Devise,因为它提供了核心,并允许我添加到
其他注意事项: - 我的应用程序需要登录并访问基本信息:位置,语言I18n等 - 我的申请也进行金融交易(如果您是付费会员等)。
回到我的问题:基于以上所述,Devise似乎是更好的选择吗? Omniauth是否提供这些功能?我应该何时使用其中一种?
由于
答案 0 :(得分:2)
Devise和Omniauth做了很多不同的事情 - 它们经常被一起使用。
设计提供包含视图,控制器和路由的完整身份验证包,以允许用户注册,编辑用户配置文件,重置密码等。 可以在没有数据库身份验证模块的情况下使用Devise,通过电子邮件密码提供注册。
Omniauth 是通过Oauth验证用户的框架。与Devise不同的Omniauth不附带任何视图或控制器。相反,您需要将Oauth回调集成到您的应用中。 Omniauth所做的是抽象出不同提供商之间的差异。
例如,两者可以一起用于通过密码或oauth提供用户身份验证。
滚动您自己的身份验证解决方案通常是不可取的。像Devise这样的项目有数百甚至数千个工时,而且许多人都在查看代码库中的缺陷。具有 Not Invented Here Syndrom 的公司的Crappy home的auth解决方案是导致用户数据和密码泄露的最常见安全故障之一。
答案 1 :(得分:1)
要向@max
的答案添加上下文,OmniAuth是对OAuth (Open Authorization)的提取......
OAuth是一种发布受保护数据并与之互动的简单方法。对于人们来说,这也是一种更安全,更安全的方式。我们一直保持简单,以节省您的时间。
每当您拥有受信任的服务时,例如Facebook
,Twitter
,LinkedIn
,GitHub
,NetFlix
等,并希望将服务与结合使用与这些现有服务上的预建连接,您需要一种安全的方式来“授权”使用该数据......
LinkedIn
Facebook
朋友发送讯息NetFlix
根据OAuth
等的“允许访问”通知,大多数人都知道Facebook
:
在您自己的应用中解释这一点很简单 - 您想从Facebook
/ Twitter
/ LinkedIn
/ GitHub
等处提取数据吗?
真实使用OAuth应该 扩展 您的应用程序。
大多数用户将“应用请求”视为其社交网络数据,作为“社交”体验的延伸(IE,如果我允许app
访问我的FB
,我希望它发布到我的墙等)。
不应将其视为允许用户使用Twitter
/ Facebook
/ LinkedIn
凭据(100%有效)登录的方式,而应考虑更高 - 等级功能。
-
Devise是一个身份验证系统; OAuth是授权。
OmniAuth
扩展OAuth
进行身份验证:
OmniAuth是一个标准化Web应用程序的多提供程序身份验证的库。
它将email
/ password
替换为Twitter API key
。因此,无论何时在您的系统上创建身份验证,您始终需要存储User
数据等 - 这些 数据经过身份验证后会产生差异。
简而言之,如果您需要Sign in with Twitter
按钮等,建议使用OmniAuth
。但是,要保持身份验证的一致性,you'll be best using Devise
with OmniAuth。
-
最后,不要滚动自己的身份验证,除非您已经实施Devise
至少5次。所有Rails身份验证的工作方式类似(使用Warden
strategies)。当Devise
有100,000名用户为您完成工作时,调整您自己的系统是不值得的。