MERN - сервер возвращается с ошибкой при публикации с аутентификацией - PullRequest
0 голосов
/ 06 декабря 2018

Я установил приложение MERN, которое включает аутентификацию.Для аутентификации я использую Passort и Google Oauth20.Аутентификация настроена и работает, и я могу использовать ее для защиты компонентов на клиентской стороне приложения в зависимости от того, вошел ли пользователь в систему. Однако я могу «получить» данные с сервера, однако при попытке «Опубликовать»«Данные от клиента к серверной части базы данных сервера, я получаю сообщение об ошибке, в котором говорится, что я должен войти в систему.

Основываясь на тестах, я уверен, что внешний интерфейс отправляет данные в порядке.Проблема возникает, когда данные перепроверяются на стороне сервера.Основываясь на промежуточном программном обеспечении, которое я установил, он возвращается с ошибкой «Вам необходимо войти в систему».Я использую axios.js для публикации данных, а мое приложение activjs использует избыточность.

Вот мои создатели действий:

export const fetchUser = () => async dispatch => {
const res = await axios.get('/api/current_user');
dispatch({type: FETCH_USER, payload: res.data});}

export const postRecipeUri = (values) => async dispatch => {
let res;
try {
    res = await axios.post("http://localhost:5000/api/recipes", values);
} catch (err) { console.log("An error occurred trying to Post")}

try { dispatch({ type: POST_RECIPE_URI, payload: res.data }); 
} catch (err) { console.log("An Error occurred while trying to dispatch POST_RECIPE_URI")}}

Вот мои маршруты:

app.get(
    '/api/recipes', requireLogin, (req, res) => {
        console.log("googleId in 'get': " + req.user.googleId);
        User.findOne({googleId: req.user.googleId})
        .then(doc => {
            res.send(doc);
        })
        .catch(err => {
            console.error("There is an error here")
        });
});


app.post("/api/recipes", requireLogin, (req, res) => {
  console.log("I am in the /api/recipes route: " + req.body.cheeseUrl);
  User.findOne({ googleId: req.user.googleId })
    .then(doc => { ...

Оба маршрута были протестированы с Почтальоном, и они работают.Я также могу видеть данные моей БД, когда я размещаю URL-адрес «get» в браузере.Для app.post ошибка возникает по адресу "req.user.googleId" в моем приложении.Вот отзывы от Моргана до того, как промежуточное ПО requireLogin было помещено в метод:

enter image description here

После того, как я добавил промежуточное ПО requireLogin, я получилСледующая ошибка, которая сообщает мне, что пользователь не вошел в систему:

enter image description here

Я использую стандартную настройку Passport Google Oauth, которая работает.Я могу войти в Google, получить свои учетные данные и сохранить их в MongoDB через Mongoose.

Я думаю, что это проблема cors между моим клиентом и сервером, но у меня нет глубокого понимания того, как corsработает.Я также думаю, что, возможно, мне нужно поместить токен в клиент, но я не смог понять сквозное понимание того, как его настроить.Будем весьма благодарны за любые предложения или замечания о том, как решить эту проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...