【问题标题】:restful_authentication applied to only an action within a controller?restful_authentication 仅应用于控制器中的操作?
【发布时间】:2010-10-18 11:09:18
【问题描述】:

我已经安装并实现了来自 technoweenie 的插件 restful_authentication。

我的申请大部分是为了公开,除了写评论的情况。

所以我有一个reviews_controller.rb,但我唯一想关心用户是否登录的时间是他们提交特定操作add_review 的时候。

add_review 是对 vendor_controller.rb 的操作,因为表单显示在 vendor/show 上。然后它重定向回 vendor/show 以显示更新(考虑将其更改为 ajax)。

如果此人未登录,我希望它重定向到登录/注册页面。

restful_authentication 的说明显示在控制器级别应用 include AuthenticatedSystem,但我不想使用该控制器中的其他操作进行身份验证。

我该怎么做?

【问题讨论】:

    标签: ruby-on-rails restful-authentication


    【解决方案1】:

    我恳请您使用 restful create 操作而不是您自己的 add_review 操作。阅读更多关于 RESTful 路由的信息:http://guides.rubyonrails.org/routing.html

    【讨论】:

    • 你的意思是使用现有的“创建”...我查看了路由部分...我不清楚我应该寻找什么。谢谢。
    • 是的,我的意思是使用现有的创建。在您的 ReviewController 中添加 add_review 操作违反规范,并且比简单地使用 create 操作更痛苦。
    • 所以这可能很愚蠢,但我正在从 vendor_controller.rb 内部调用 add_review 操作(类似功能的教程据说这样做)......所以我不在 ReviewController 中,因为页面是供应商的视图。
    • 好吧,做嵌套的restful路由。查看路由指南以了解我的意思。
    【解决方案2】:

    将 AuthenticatedSystem 模块包含在您需要它的控制器中(或 ApplicationController,如果您需要它不止一个),然后使用 before_filter 仅应用于您想要的操作,例如:

    class VendorsController < ApplicationController
      include AuthenticatedSystem
      before_filter :login_required, :only => [:add_review]
    end
    

    【讨论】:

    • before_filter 也可以采用 :except 参数,如果您希望某个操作没有身份验证。
    • 意思,:except => [:non-authenticated-controller] ?
    • :except => [:non_authenticated_action] 一个前置过滤器适用于控制器中的所有操作(以及控制器中子类该控制器的操作)。 :only/:except 指定操作以使过滤器更具体。使用 api.rubyonrails.org 查找更多信息
    猜你喜欢
    • 1970-01-01
    • 2010-11-29
    • 2013-02-21
    • 2010-10-28
    • 1970-01-01
    • 2015-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多