【问题标题】:devise gem and jquery设计 gem 和 jquery
【发布时间】:2011-07-19 21:23:09
【问题描述】:

我正在使用设计 gem (1.4.2) 和 rails (3.0.7)。我有一个带有一些复选框和一些 jquery 设置的视图,这样当我选中一个框时,它会发布一个由我的一个控制器处理的帖子。不幸的是,当我这样做时,它会将当前用户注销。有没有一种简单的方法可以避免这种情况?谢谢!

jquery 代码:

$(‘.do_some_action).live(‘change’, function(){
  $.post(‘/my_model/do_some_action’, {param1 : param1Value})
   return false
})

基础控制器:

class AuthorizedController < ApplicationController
  before_filter :authenticate_user!
  check_authorization
  load_and_authorize_resource

  rescue_from CanCan::AccessDenied do |exception|
    flash[:error] = exception.message
    redirect_to request.referer
  end
end

特定控制器:

class MyModelsController < AuthorizedController
  ...
  def some_action
    ...
  end
end

-乔丹

【问题讨论】:

  • 我们....需要....代码... – user482594 3 分钟前
  • 仍然没有足够的代码:) 这是抽象的说任何具体的东西

标签: ruby-on-rails ruby ruby-on-rails-3 devise cancan


【解决方案1】:

听起来您没有在 AJAX 请求中传递 CSFR 令牌。

确保通过在 HTML 中调用 csrf_meta_tag 来设置 CSFR 元标记。然后,您可以使用下面的 JavaScript 代码来确保在任何 AJAX 请求上都设置了 CSFR 标记。

$.ajaxSetup({beforeSend: function(xhr) {xhr.setRequestHeader("X-CSRF-Token", $("meta[name='csrf-token']").attr("content")); }});

您还可以通过在控制器中添加以下内容来禁用该操作的 CSFR 检查,但 JavaScript 替代方案会更好。

skip_before_filter :verify_authenticity_token

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多