Я делаю регистрацию учетной записи с использованием аутентификации электронной почты, отправляю токен по URL-адресу, затем использую useParams, чтобы получить токен из URL-адреса и передать его бэкэнду для окончательной проверки учетной записи пользователя.
Проблема заключается в том, что в промежуточном программном обеспечении аутентификации бэкэнда обратный вызов next () не продолжается в процессе.
Промежуточное программное обеспечение разрешает / декодирует токен успешно (потому что он показывает идентификатор пользователя, сохраненный внутри него), и когда вызывается next (), все останавливается, не выдает никаких ошибок, ничего. Это происходит, когда я делаю запрос GET, если я делаю запрос POST, он возвращает, что токен недействителен, что не соответствует действительности.
Внешний запрос:
const Confirmation = () => {
const [popMessage, setPopMessage] = useState('');
let params = useParams("/confirm/:token");
const {token} = params;
const confirmAcc = async () =>{
try {
const config = {
headers:{
'x-auth-token': token,
}
}
await axios.get('/api/auth/confirm/', config)
.catch(err=>{
console.error(err.response);
})
setPopMessage('Your account has been confirmed');
// setTimeout(() => { window.location.href = '/login';}, 3500);
} catch (err) {
console.log(err.response.data);
return;
}
}
Назад Маршрутизатор:
router.get('/confirm/', auth, async (req, res) => {
console.log('Im here!!')
try {
console.log('Im here too!!')
const user = await User.findById(req.user.id).select('-password');
console.log('user', user)
await user.update({ confirmed: true });
sendEmail(user.email, user.name, "welcome");
} catch (err) {
res.status(401).send('your email token is invalid');
return;
}
});
Промежуточное программное обеспечение 'auth':
module.exports = function(req, res, next) {
const token = req.header('x-auth-token');
if (!token) {
return res.status(401).send('No token, authorization denied ');
}
try {
const decoded = jwt.verify(token, config.get('jwtSecret'));
console.log('decoded:', decoded)
req.user = decoded.user;
next();
} catch(err) {
res.status(401).send('Token is not valid');
}
}
Самое странное: с этим маршрутизатором это происходит только в том случае, если остальная часть приложения работает с таким же точным кодом. Буду очень признателен, если кто-нибудь сможет поделиться какими-либо идеями.
Заранее спасибо!