【问题标题】:How to make a public page in an app that uses devise如何在使用设计的应用程序中创建公共页面
【发布时间】:2014-12-03 18:56:38
【问题描述】:

我在 Rails 4 应用程序中使用设计进行身份验证。几乎所有的应用程序都需要对用户进行身份验证,但是,有一些“公共”页面(条款和条件——诸如此类的东西)。

Devise 本身使用prepend_before_filter :require_no_authentication 公开sign upsign in 页面。但是,那个方法is intended only for devise controllers。并且设计似乎没有提供一种“适当”的方式来公开单个操作。

那么,将几个操作公开的最佳方式是什么?

目前我能想到的唯一方法是:

  1. 创建一个新的public 命名空间,并为公共操作提供单独的控制器,这些控制器继承自不执行before_filter :authenticate_user!PublicController

  2. 与上面相同,但放弃继承和命名空间。因此,PublicController 可以充当任何需要公开的内容的存储桶 - 在现阶段这并不多。

有没有更好的方法通过设计公开个人行为?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 devise


    【解决方案1】:

    您可以选择将 skip_before_action 用于公共控制器。来自guides的示例:

    class LoginsController < ApplicationController
      skip_before_action :require_login, only: [:new, :create]
    end
    

    【讨论】:

    • 这正是我所需要的!谢谢。
    • @Pedro 请将链接中的相关信息复制/粘贴到您的答案中。
    【解决方案2】:

    在您的控制器中,您希望拥有:

    before_action :authenticate_user!, :except => [:index]
    

    这将对除index 操作之外的所有操作执行:authenticate_user! 方法。 你可以在这个answer找到更多解释。

    【讨论】:

    • 如果我执行以下操作就可以了:authenticate_user!在每个控制器的基础上,但目前它在我的超类中。
    • @joshua.paling 我不知道你的结构,但是当我在处理诸如Terms of conditionsAbout 之类的页面时,我会为所有公共页面创建单独的控制器。
    • 是的,他完全正确,skip_before_action 正是您所需要的。抱歉,错误回复,我不知道你在超类中有authentication_user!
    猜你喜欢
    • 2016-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多