这是一个两个问题。我在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返回401 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
我看到内容类型现在是text/plain
。 (有趣的是,#34;接受"是小写的......我也很想知道。)
有人可以向我解释发生了什么吗?
答案 0 :(得分:0)
您需要发送X-CSRF-TOKEN以及您的帖子请求,或者您应该跳过verify_authenticity_token
如果您想跳过authenticity_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) {
....
}
});