Я новичок в Devise, и до сих пор было круто учиться и работать с ним. Я создаю приложение Rails, которое имеет интерфейс React, и я разрабатываю API для интерфейса, чтобы проверить, является ли пользователь, вошедший в систему, администратором.
У меня есть этот код React, который использует метод "is_admin"
componentWillMount(){
this.checkIfUserIsAdmin();
}
checkIfUserIsAdmin() {
const url = "http://localhost:3000/users/is_admin";
const token = document.querySelector('meta[name="csrf-token"]').content;
console.log(token)
fetch(url, {
method: "GET",
headers: {
"X-CSRF-Token": token,
"Content-Type": "application/json"
}
})
.then(response => {
if (response.ok) {
return response.json();
}
throw new Error("Network response was not ok.");
})
.catch(error => console.log(error.message));
//eventually this will update the component state depending on the response
}
API, кажется, просто достигает нужной конечной точки, но я получаю ответ от сервера:
Started GET "/users/is_admin" for ::1 at 2020-03-02 14:59:05 -0800
Processing by SessionsController#is_admin as */*
Parameters: {"session"=>{}}
Completed 500 Internal Server Error in 2ms (ActiveRecord: 0.0ms | Allocations: 1235)
NoMethodError (undefined method `admin?' for nil:NilClass):
Это похоже на указать, что для Devise нет пользователя, чтобы проверить, включен ли администратор. Это имело бы смысл, поскольку я ничего не передаю для идентификации пользователя в метод Rails из React. У меня сложилось впечатление, что Devise будет управлять сессией, и что достаточно передать токен CSRF.
Каким будет правильный способ решить эту проблему? Должен ли я сначала получить данные авторизованного пользователя, а затем установить @user на результат этого?