2011-10-14 82 views
2

我们想为我们的应用3种不同的登入方式:rails 3/heroku/devise:用户登录时如何指定不同的“登录页面”?

  • 默认登入形式,带他们到他们的正常仪表盘(因为我们现在要做)

  • 一个“富”登入形成,如果他们使用这种形式登录,将他们带到一个专用屏幕

  • “条”登入形式把他们又anogther专用屏幕

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

一)创建/ foo和/条新路线,大概导演都到同一个登入方法,但在路线中添加URL参数“signin_type”告诉我们哪些“类型”的登录表单是什么?

b)实现一个自定义的RegistrationsController方法(什么名字?)来处理登录表单(我们已经有了一个自定义的new和create方法,因为我们的注册表单需要一个'referral code'字段添加),并有方法看url参数'signin_type'重定向标志为正常,或富,或坏

c)实现处理登录提交的另一种方法(是一种不同的方法? )看看一些特殊的嵌入式表单值来判断使用哪种签名表单?

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

回答

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 

第一种方法覆盖的root设计的默认位置,并将其设置为nil,那么之后的逻辑是非常自我解释。这应该适用于你想要的东西。

+0

谢谢,但是如果我正确地理解了那些不会让我拥有不同登录页面的建议(3登录页面因为登录到应用的不同“部分”而需要看起来不一样) – jpwynn

+0

其实你仍然可以拥有如果您愿意,可以使用3种不同的登录页只需遵循[this](https://github.com/plataformatec/devise/wiki/How-To:-Display-a-custom-sign_in-form-anywhere-in-your-app)教程即可在表单中添加标志到任何你想要的页面。然后它会按照我的答案中的逻辑重定向到适当的位置。 – janders223

+0

真棒,谢谢! – jpwynn

相关问题