0

这是一种二合一的问题。我在 Rails 中相当扎实,但在 react/redux 方面是个菜鸟,我正在努力在 react/redux 应用程序上实现身份验证。

我有一个自己构建的 Rails 4 API。它经过了很好的测试并且很稳固。我的 Rails API 正在使用 devise-token-auth gem。

fetch('http://localhost:8080/api/auth/sign_in', {
  method: 'POST',
  headers: {'Content-Type': 'application/json', 'Accept': "application/vnd.myproject.v1"},
  body: {email: email, password: password},
  ... // snip response handling
})

然而,当它发送请求时,我的 API 返回 a401 Unauthorized并且请求失败。

检查服务器日志,我为请求发送的正文没有显示出来。

params: {"format"=>"json", "controller"=>"devise_token_auth/sessions", "action"=>"create"}

在浏览器的网络视图中查看请求,我看到了sign_in以下请求:

accept:application/vnd.myproject.v1
content-type:text/plain;charset=UTF-8

我看到内容类型是 now text/plain。(有趣的是“接受”是小写的......我也想知道。)

有人可以向我解释发生了什么吗?

4

1 回答 1

0

您需要在您的发布请求中发送 X-CSRF-TOKEN 或者您应该跳过 verify_authenticity_token

如果你想跳过authentity_token 验证,你可以使用类似的东西:

class ApplicationController < ActionController::Base
  protect_from_forgery
  skip_before_action :verify_authenticity_token, if: :json_request?

  protected

  def json_request?
    request.format.json?
  end
end

如果要设置标头,请参阅示例 jQuery Ajax 请求:

              $.ajax({
                        type: 'POST',
                        dataType: 'script',
                        beforeSend: function (xhr) {
                            xhr.setRequestHeader('X-CSRF-Token',
                                $('meta[name="csrf-token"]').attr('content'));
                        }, url: $(ui.item).closest('.sortable').data("sortable-link"),
                        success: function (data) {
                            ....
                        }
                    });
于 2016-03-22T10:33:36.943 回答