rails 3 / heroku / devise:用户登录时如何指定不同的“目标网页”?

时间:2011-10-14 19:35:28

标签: ruby-on-rails devise

我们希望为我们的应用提供3种不同的登录表单:

  • 默认登录表单,将其带到正常的信息中心(就像我们现在一样)

  • “foo”登录表单,如果他们使用该表格登录,则将其带到特殊用途的屏幕

  • 一个“酒吧”登录表格,将他们带到另一个特殊用途的屏幕

我认为正确的方法是以某种方式

a)为/ foo和/ bar创建一个新路由,可能指向SAME signin方法,但在路由中添加一个url参数'signin_type'告诉我们哪种“类型”的签名形式?

b)实现一个自定义的RegistrationsController方法(用什么名称?)来处理登录表单(我们已经有一个自定义的新方法和创建方法,因为我们的注册表格需要添加'推荐代码'字段),并让方法查看url参数'signin_type'将符号重定向到正常,或foo或坏

c)实现另一个处理登录提交的方法(这是一个不同的方法吗?),它会查看一些特殊的嵌入式表单值来表示使用哪种签名表单?

这是我最好的猜测。如果正确,那就是如何做(b)和(c)让我难过。任何想法都将不胜感激!

1 个答案:

答案 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,之后的逻辑非常自我解释。这应该适合你想要的东西。