У меня есть паспорт, предназначенный для использования стратегии Google, и вы можете направлять его в/auth/google. В настоящее время у меня есть это, так что, когда вы входите в систему с помощью аутентификации google oauth2, мои конечные точки будут аутентифицироваться, проверив для req.user
. Это работает, когда я просто добираюсь до конечных точек в своем браузере. Если я перейду к /auth/google
, а затем /questions
, я смогу сделать запрос. Однако, когда я пытаюсь сделать запрос на выбор из redux, я получу сообщение об ошибке Uncaught (in promise) SyntaxError: Unexpected token < in JSON at position 0
. Это происходит потому, что API-интерфейс fetch пытается добраться до моей конечной точки /questions
, проходит через мое промежуточное программное обеспечение loggedIn
и затем не отвечает if (!req.user)
и вместо этого перенаправляется. Любые идеи о том, как аутентифицироваться из API-интерфейса Fetch с помощью PassportJS и паспорта-google-oauth2?Конечные точки, не аутентифицирующие с помощью вызовов API Fetch (с использованием паспорта-google-oauth2)
loggedIn
функция:
function loggedIn(req, res, next) {
if (req.user) {
next();
} else {
res.redirect('/');
}
}
Вот мой код для моего 'GET' конечной точки.
router.get('/', loggedIn, (req, res) => {
const userId = req.user._id;
User.findById(userId, (err, user) => {
if (err) {
return res.status(400).json(err);
}
Question.findById(user.questions[0].questionId, (err, question) => {
if (err) {
return res.status(400).json(err);
}
const resQuestion = {
_id: question._id,
question: question.question,
mValue: user.questions[0].mValue,
score: user.score,
};
return res.status(200).json(resQuestion);
});
});
});
перевождь принести запрос:
function fetchQuestion() {
return (dispatch) => {
let url = 'http://localhost:8080/questions';
return fetch(url).then((response) => {
if (response.status < 200 || response.status >= 300) {
let error = new Error(response.statusText);
error.response = response;
throw error;
}
return response.json();
}).then((questions) => {
return dispatch(fetchQuestionsSuccess(questions));
}).catch((error) => {
return dispatch(fetchQuestionsError(error));
}
};
}