【问题标题】:Rails Devise Authentication Token with AJAXRails 使用 AJAX 设计身份验证令牌
【发布时间】:2015-02-11 08:11:58
【问题描述】:

我正在使用 Devise 作为身份验证系统制作基于 AJAX 的应用程序。我遇到的问题是,当我使用 AJAX 使用 Devise 登录时,当视图更改并出现注销按钮时,单击时会显示此错误:

ActionController::InvalidAuthenticityToken in Customization::SessionsController#destroy

ActionController::InvalidAuthenticityToken

Parameters:

{"_method"=>"delete",
 "authenticity_token"=>"hitX5aEjoTzi3tKP3y76+c60MuJumv5mwNEjyGUOQiY="}

这里你有我的设计会话控制器的登录方法(我不得不改变一些事情来实现 AJAX):

  # POST /resource/sign_in
  def create
    self.resource = warden.authenticate!(auth_options)
    sign_in(resource_name, resource)
    yield resource if block_given?
    if user_signed_in?
      flash[:logged] = "Zalogowany"
      respond_to do |format|
        format.html { redirect_to root_path }
        format.js { render "sign_in_success.js.erb" }
      end
    end
  end

sign_in_success.js.erb 文件:

$("body").empty();
$("body").append("<%= j(render template: 'layouts/user') %>");

“布局/用户”内的按钮:

a href="#{destroy_user_session_path}" data-method="delete" rel="nofollow"
  button.btn.btn-primary.m-r-20 type="button"
    b Log Out

如何使用 AJAX 发送 Authenticity Token?我可以通过渲染中的 locals 选项将其发送给“布局/用户”并以这种方式使用吗?

【问题讨论】:

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


    【解决方案1】:

    我有解决办法。问题是创建新会话时没有更新 csrf_meta_tags。该问题的解决方案是在 sign_in_success.js.erb 文件中包含额外的代码:

    $("body").empty();
    $("meta[name='csrf-token']").remove()
    $("meta[name='csrf-param']").remove()
    $("head").append("<meta name='csrf-token' content='<%= form_authenticity_token %>'>");
    $("head").append("<meta name='csrf-param' content='<%= request_forgery_protection_token %>'>");
    $("body").append("<%= j(render template: 'user/logged_signed') %>");
    

    使用上面的代码,我们首先清空 body 元素,然后从 csrf_meta_tags 助手创建的 DOM 元标记中删除。之后我们手动添加新的 csrf-token 和 csrf-param,这次我们的新真实性令牌被分配给 meta name="csrf-token"。

    之后,当我们点击由“user/logged_signed”模板呈现的 log_out 按钮时,我们会成功注销并返回到我们的 root_path。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-01
      • 2016-05-08
      • 2011-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多