Нужно ли получать информацию о пользователе перед проверкой пользовательских данных с помощью Devise / Rails + React? - PullRequest
0 голосов
/ 03 марта 2020

Я новичок в 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 на результат этого?

...