我们希望为我们的应用提供3种不同的登录表单:
默认登录表单,将其带到正常的信息中心(就像我们现在一样)
“foo”登录表单,如果他们使用该表格登录,则将其带到特殊用途的屏幕
一个“酒吧”登录表格,将他们带到另一个特殊用途的屏幕
我认为正确的方法是以某种方式
a)为/ foo和/ bar创建一个新路由,可能指向SAME signin方法,但在路由中添加一个url参数'signin_type'告诉我们哪种“类型”的签名形式?
b)实现一个自定义的RegistrationsController方法(用什么名称?)来处理登录表单(我们已经有一个自定义的新方法和创建方法,因为我们的注册表格需要添加'推荐代码'字段),并让方法查看url参数'signin_type'将符号重定向到正常,或foo或坏
c)实现另一个处理登录提交的方法(这是一个不同的方法吗?),它会查看一些特殊的嵌入式表单值来表示使用哪种签名表单?
这是我最好的猜测。如果正确,那就是如何做(b)和(c)让我难过。任何想法都将不胜感激!
答案 0 :(得分:2)
我想你可能会试图过度设计这个。我将使用单个sign_in页面来处理此问题,并且仅使用条件逻辑来覆盖Devise控制器的after_sign_in_path_for(resource)
方法。这不仅现在更容易实现,将来维护起来会容易得多。只需添加到ApplicationController.rb
:
protected
def stored_location_for(resource)
nil
end
def after_sign_in_path_for(resource)
if condition_foo
redirect_to foo_url
elsif condition bar
redirect_to bar_url
else
redirect_to dashboard_url
end
end
第一种方法会覆盖Devise的默认位置root
并将其设置为nil,之后的逻辑非常自我解释。这应该适合你想要的东西。