Phoenix CSRF 令牌不匹配

2024-02-17

试图让 ajax 工作在 Phoenix 上。我通过执行以下操作来获取 csrf 令牌,这样我就拥有了它:

<input type="hidden" id="_csrf_token"  name="_csrf_token" value="<%= get_csrf_token() %>">

然后像这样使用它:

$.ajax({
  type: "POST",
  url: "<%= lesson_path @conn, :create %>",
  beforeSend: function(xhr)
  {
    token = $('#_csrf_token').val();
    xhr.setRequestHeader('_csrf_token', token );
  },
  data: data,
  success: function(data, textStatus, jqXHR) {
    alert(textStatus);
  }
});

问题是我得到的令牌不是正确的令牌。查看 google chrome 检查器,我收到请求 403,表示存在无效的 csrf 令牌。有效的会话令牌始终与它给我的令牌不同。得到这样的东西IiJndz5FeV9MMhIKMzggUTtmHUALAAAAkJ/6Yr/k4BxdiKmiaMUqsw==它通常想要这样的东西hHAg7V4xpjnZsM8Z+H1xw==

知道为什么我会得到与它想要的不同的令牌吗?

我也尝试过以下方法:

Plug.Conn.get_session(conn, :csrf_token)
Map.get(conn.req_cookies, "_csrf_token")

两者都不会返回任何内容。


令牌可以由请求通过带有键“_csrf_token”的参数或带有名称“x-csrf-token”的标头发送。

尝试使用 key 设置标题:

x-csrf-token
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Phoenix CSRF 令牌不匹配 的相关文章

随机推荐