Я установил приложение 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 было помещено в метод:
После того, как я добавил промежуточное ПО requireLogin, я получилСледующая ошибка, которая сообщает мне, что пользователь не вошел в систему:
Я использую стандартную настройку Passport Google Oauth, которая работает.Я могу войти в Google, получить свои учетные данные и сохранить их в MongoDB через Mongoose.
Я думаю, что это проблема cors между моим клиентом и сервером, но у меня нет глубокого понимания того, как corsработает.Я также думаю, что, возможно, мне нужно поместить токен в клиент, но я не смог понять сквозное понимание того, как его настроить.Будем весьма благодарны за любые предложения или замечания о том, как решить эту проблему.