У меня есть приложение rails 5.2, которое изначально было создано с Devise
и простыми старыми erb
файлами. Я мог бы проверить current_user во внешнем интерфейсе и все такое.
Теперь я пытаюсь медленно переместить его в интерфейс React. Я не изменил никаких настроек, но действие create
моего контроллера возвращает false для user_signed_in?
, но по индексу оно возвращает true
. Есть ли в моем запросе заголовок, который я не передаю?
пример кода
class FanciesController < ApplicationController
skip_before_action :verify_authenticity_token, only: :search_fancy
after_action :verify_authorized
def index
@fancies = Fancy.all
authorize @fancies
respond_to do |format|
format.html { render :index }
format.json { render json: {...}, status: :ok }
end
end
def create
@fancy = Fancy.new(...)
authorize @fancy
respond_to do |format|
if @fancy.save
format.html { redirect_to @fancy, notice: 'Availability was successfully created.' }
format.json { render :show, status: :created, json: {..}}
else
format.html { render :new }
format.json { render json: {...}, status: :unprocessable_entity }
end
end
end
end
Код внешнего интерфейса:
#index.html.erb
<%= react_component("FancyScreen", { selection_fancies: @fancies }) %>
компонент реагирования:
class FancyScreen extends React.Component {
...
onCreateClick(selected_time) {
const headers = { 'Content-Type': 'application/json', 'Accept': 'application/json' };
const requestOptions = {
method: 'POST',
headers: headers,
body: JSON.stringify({...})
}
fetch(curl_url, requestOptions)
.then(response => response.json())
.then(data => {
new_fancy.push(data)
fn.setState({
fancies: new_fancy
});
});
}
}
}
Я попытался передать токен csrf через мои заголовки, но это все равно не сработало.
‘X-CSRF-TOKEN’: $(‘meta[name=”csrf-token”]’).attr(‘content’)
Я определенно отсутствует, я скучаю по некоторым основам, но если бы кто-то мог указать мне правильное направление, я уверен, что мог бы понять это. Я попытался установить devise-jwt
gem, но, похоже, это не совсем то, что я хочу.
Есть идеи, что я делаю не так?