【问题标题】:In Rails 3 app, how do I allow anonymous users to access a controller action only once?在 Rails 3 应用程序中,如何允许匿名用户只访问一次控制器操作?
【发布时间】:2011-10-07 05:45:05
【问题描述】:

例如,假设我有一个博客,任何人都可以阅读文章、阅读 cmets 并将任何评论标记为不适当。如何防止未登录用户多次点击“举报评论”链接?

“标记评论”链接将直接绑定到评论模型的控制器方法。

我不熟悉会话和 cookie(以及一般的 Rails)。我在Sessions 上读过这篇文章,但恐怕我还是有点困惑。

我考虑过创建一个名为 Guest 的基类,但我想知道是否可以避免这种情况,而是使用会话或 cookie 临时数据。

提前致谢。

【问题讨论】:

    标签: ruby-on-rails-3 session cookies controller anonymous-users


    【解决方案1】:

    基本思路可能如下(抱歉,还没有代码):

    1. 定义应将哪些信息存储在会话和/或 cookie 中。我认为每个标记的评论应该是comment 的id。将它们存储在类似哈希的结构中。
    2. 根据 cookie 的内容创建指向 flagging a comment 的链接。类似的东西:

      ...
      = link_to('flag comment', flag_comment_path(comment.id)) if ! cookies[:flagged_comments] || ! cookies[:flagged_comments][comment.id]
      
    3. 在标记评论时设置 cookie 哈希值(此处使用局部变量 comment,这必须在某处设置或知道):

      cookies[:flagged_comments] = Hash.new if ! cookies[:flagged_comments]
      cookies[:flagged_comments][comment.id] = comment.id
      

    我不知道代码是否可以工作,但想法应该很清楚。是的,只对匿名用户这样做(更依赖于 UI 和控制器功能)。

    还有一件事:我认为您不应该使用会话和 cookie 来存储这些信息。而且由于您必须注意到有人在 2 个不同的会话中标记评论时,请仅使用 cookie。

    【讨论】:

    • 感谢您的提示!我将尝试在我的代码中加入你所说的元素,看看它是如何工作的!
    • 无法让它工作。当我在控制器中尝试 cookies[:flagged_cmets][id] = id 时,我不断收到错误“未定义的局部变量或方法 id”。另外,你能解释一下你的if语句吗?在我看来,只有在设置了 cookie 哈希值时,链接才会处于活动状态(不应该是相反的吗?)。
    • 我已经改变了逻辑(你是对的,只有在以前没有设置的情况下才允许使用标志)。 id来自评论,所以我加了comment.id来明确这里需要什么id。
    • 还是没有运气。当我尝试cookies[:flagged_comments][@comment.id] = @comment.id 我得到错误Can't convert Fixednum into string 所以我尝试cookies[:flagged_comments]["#{@comment.id}"] = @comment.id 只是得到错误string not matched。
    • 我什至在控制器操作中尝试了cookies[:flagged_comments] = cookies[:flagged_comments].to_s.split(',').push(params[:id].to_s).join(','),然后在视图中尝试了link_to('flag comment', flag_comment_path(comment.id)) if (cookies[:flagged_comments].to_s.split(',')).include?(comment.id),但这不起作用(至少没有错误)。
    猜你喜欢
    • 1970-01-01
    • 2012-01-05
    • 2019-11-19
    • 1970-01-01
    • 2020-02-16
    • 1970-01-01
    • 2015-06-13
    • 2021-03-18
    • 2014-05-20
    相关资源
    最近更新 更多