У меня есть маршрут создания с Rails API. Работает нормально с почтальоном. Но он зависает от реального сайта, который я строю.
Я думаю * Я обработал защиту csrf, но я вижу: «Не удается проверить подлинность токена CSRF». в логе героку ниже. У меня есть 'protect_from_forgery with:: null_session' в контроллере приложения.
Я не могу понять, что происходит. Вот контроллер в полном объеме:
class PostsController < ApplicationController
# controls error handling
# rescue_from ActiveRecord::RecordInvalid, with: :render_unprocessable_entity_response
rescue_from ActiveRecord::RecordNotFound, with: :render_not_found_response
def index
@posts = Post.all
render json: @posts, include: 'comments', status: 200
end
def create
@post = Post.new(post_params)
if @post.save
render json: @post, status: 201
else
render json: {status: "error", code: 400, message: "Not all required params were provided"}, status: 400
end
end
private
# defines the data in the post model
def post_params
params.permit(:content, :title)
end
def render_not_found_response(exception)
render json: {
message: "Validation Failed",
errors: exception.message,
location: 'id'
}, status: 422
end
end
Контроллер приложения:
class ApplicationController < ActionController::Base
# prevents csrf blocking
protect_from_forgery with: :null_session
end
Вот полный журнал ошибок от heroku:
2018-04-26T22:38:30.591225+00:00 heroku[router]: at=info method=OPTIONS path="/posts" host=seabolt-rails-api.herokuapp.com request_id=b3fcf1fa-fc7f-4a7c-a9fe-d41af12d9bab fwd="73.71.195.204" dyno=web.1 connect=1ms service=2ms status=200 bytes=335 protocol=https
2018-04-26T22:38:30.702794+00:00 app[web.1]: I, [2018-04-26T22:38:30.701935 #4] INFO -- : [c6c143d4-2846-40c2-b1fd-153defae6312] Processing by PostsController#create as */*
2018-04-26T22:38:30.691208+00:00 app[web.1]: I, [2018-04-26T22:38:30.690928 #4] INFO -- : [c6c143d4-2846-40c2-b1fd-153defae6312] Started POST "/posts" for 73.71.195.204 at 2018-04-26 22:38:30 +0000
2018-04-26T22:38:30.702806+00:00 app[web.1]: I, [2018-04-26T22:38:30.702579 #4] INFO -- : [c6c143d4-2846-40c2-b1fd-153defae6312] Parameters: {"newPost"=>{"title"=>"sdfdsfsd", "content"=>"sfdfsdsfd"}, "post"=>{}}
2018-04-26T22:38:30.705007+00:00 app[web.1]: W, [2018-04-26T22:38:30.704875 #4] WARN -- : [c6c143d4-2846-40c2-b1fd-153defae6312] Can't verify CSRF token authenticity.
2018-04-26T22:38:30.712141+00:00 app[web.1]: D, [2018-04-26T22:38:30.711967 #4] DEBUG -- : [c6c143d4-2846-40c2-b1fd-153defae6312] (1.3ms) BEGIN
2018-04-26T22:38:30.734534+00:00 app[web.1]: D, [2018-04-26T22:38:30.734374 #4] DEBUG -- : [c6c143d4-2846-40c2-b1fd-153defae6312] (1.2ms) ROLLBACK
2018-04-26T22:38:30.735886+00:00 app[web.1]: I, [2018-04-26T22:38:30.735792 #4] INFO -- : [c6c143d4-2846-40c2-b1fd-153defae6312] Completed 400 Bad Request in 33ms (Views: 0.6ms | ActiveRecord: 2.6ms)
2018-04-26T22:38:30.737444+00:00 heroku[router]: at=info method=POST path="/posts" host=seabolt-rails-api.herokuapp.com request_id=c6c143d4-2846-40c2-b1fd-153defae6312 fwd="73.71.195.204" dyno=web.1 connect=1ms service=53ms status=400 bytes=613 protocol=https
Я получаю это в своей консоли, но это моя собственная ошибка (и я думаю, что мне нужно ее изменить, потому что рассуждения, похоже, не точны:
{status: "error", code: 400, message: "Not all required params were provided"}
Вот действие излишнего толчка, которое инициирует запрос:
export const createPost = newPost => dispatch => {
console.log(newPost)
return fetch(`https://seabolt-rails-api.herokuapp.com/posts `, {
method: 'POST',
headers: {
'content-type': 'application/json'
},
body: JSON.stringify({post: {newPost}})
})
.then(res => normalizeResponseErrors(res))
.then(() => dispatch(getAllPosts()))
.catch(err => console.error(err));
}
Я не уверен, что делать. Помощь!