Ruby on rails 在表单中设置多个设计符号的最佳方法是什么

Ruby on rails 在表单中设置多个设计符号的最佳方法是什么,ruby-on-rails,devise,Ruby On Rails,Devise,我想我走错了方向。 我正在使用Desive 3.5.3和Rails 4.2.5 我有3种不同的用户:普通用户、卖家和赎回者。 每种类型都应该有自己的登录页面,因为普通用户只通过Facebook登录,卖家和兑换者通过电子邮件登录。 到目前为止,我的路线设置如下: devise_for :users, class_name: 'FormUser', :controllers => { omniauth_callbacks: 'omniauth_callbacks', registrations

我想我走错了方向。 我正在使用Desive 3.5.3和Rails 4.2.5 我有3种不同的用户:普通用户、卖家和赎回者。 每种类型都应该有自己的登录页面,因为普通用户只通过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显示登录选项

<% if request.fullpath.include?('sign_in') %>
  show Facebook Login
<% else %>
  show regular devise form
<% end %>

显示Facebook登录
显示规则的设计形式
这很管用。我的问题是,当输入无效凭据时,Desive将重定向到页面中的/users/sign_,而不是/sellers或/emedimers URL

我可以按照这些指示去做

设置自定义重定向,但我觉得我走错了方向。整个设置看起来很粗糙

如果您能为我的用例提供关于最佳实践的建议,我将不胜感激

关于最佳实践

好的软件开发的主要拥护者之一是(虽然不直接适用于您的问题,但突出了答案的一个主要方面)-保持功能尽可能简单。Rails使用

简言之,只有一套功能,可以无限重复使用

--

我想说,您需要一条登录路线。您的用户不在乎他们是
卖家
赎回者
还是
标准用户
->他们想登录您的应用程序并获得所需的功能:

#config/routes.rb
devise_for :users, class_name: 'FormUser', :controllers => { omniauth_callbacks: 'omniauth_callbacks', registrations: 'registrations' }
由于普通用户仅通过Facebook登录,卖家和兑换者通过电子邮件登录

为什么你有多种不同的方法为不同的当事人

我认为您正在混淆身份验证和授权:

  • 身份验证=用户登录
  • 授权=用户有权限吗
简而言之,
身份验证
/
设计
应该处理用户是否登录。这与登录方法无关;无论他们使用的是
facebook
还是
email
,都应该是无关紧要的

我个人会允许所有用户使用他们想要的任何服务登录,然后通过授权实现(etc)管理他们的访问

--


答案相当广泛,如果不相关,我将删除它。

我认为您只需要一个设计表单和一个
omniauth facebook
按钮。您可以根据调用的url来区分这一点。此链接可能会帮助您获得非常好的参考
@PardeepDhingra
,谢谢。谢谢您的回答。我将实现一个建议的单一登录屏幕,并根据调用的url显示不同的选项。完成后将向您汇报。谢谢您的广泛回答。我的网络应用在很大程度上依赖于Facebook的价值。因此,普通用户需要通过Facebook注册/登录。其他用户(如卖家和兑换者)登录以执行管理任务。一旦他们注册我们的服务,我们就会向他们发送凭证。在这种情况下,这些需要是电子邮件登录,而不是Facebook。我确实使用cancan限制卖家/赎回人登录后可以做什么。