我想我会走错路。 我正在使用Devise 3.5.3和Rails 4.2.5 我有3种不同的用户:普通用户,卖家和兑换商。 每种类型都应该有自己的sign_in页面,因为普通用户只能通过Facebook登录,卖家和兑换商会通过电子邮件登录。 到目前为止,我已经设置了这样的路线:
devise_for :users, class_name: 'FormUser', :controllers => { omniauth_callbacks: 'omniauth_callbacks', registrations: 'registrations' }
as :user do
get 'seller', :to => 'devise/sessions#new'
get 'redeemer', :to => 'devise/sessions#new'
end
我有一个新的会话视图,我根据另一个StackOverflow答案中建议的请求URL显示sign_in选项
<% if request.fullpath.include?('sign_in') %>
show Facebook Login
<% else %>
show regular devise form
<% end %>
这是一种时尚之后的作品。我的问题是,当输入无效凭证时,设计将重定向到/ users / sign_in页面而不是/ sellers或/ redeemers URL。
我可以按照这些说明进行操作
设置自定义重定向,但我觉得我的方向错误。整个设置看起来很乱。
对于我的用例的最佳实践,我将不胜感激。
答案 0 :(得分:0)
关于最佳做法
良好软件开发的主要支持者之一是Single Source of Truth
(虽然不直接适用于您的问题,但突出了答案的一个主要方面) - 保持功能尽可能简单。 Rails通过DRY
convention触及了这一点。
简而言之,只有一组功能,无限重用。
-
我会说您需要一条登录路线。您的用户无需关心他们是sellers
,redeemers
还是standard users
- &gt;他们希望登录您的应用并获得所需的功能:
#config/routes.rb
devise_for :users, class_name: 'FormUser', :controllers => { omniauth_callbacks: 'omniauth_callbacks', registrations: 'registrations' }
由于普通用户仅通过Facebook登录,卖家和兑换商通过电子邮件登录
为什么不同方有多种方法?
我认为您在身份验证和授权之间感到困惑:
简而言之,authentication
/ Devise
应该处理用户是否已登录。这与登录方法无关;他们使用facebook
还是email
应该是无关紧要的。
我个人允许所有用户使用他们想要的任何服务登录,然后使用授权实施(CanCanCan
等)管理他们的访问权限。
-
如果不相关,我会删除它。