Node.js не рендерится на chrome, но рендерит на почтальоне с аутентификацией JWT
Нужна помощь:(. У меня есть страница входа в систему. В части регистрации, пользователь может зарегистрироваться и должен пройти аутентификацию и получить токен, который хранится в локальном хранилище. После этого пользователь будет перенаправлен на страница профиля с токеном, но перед перенаправлением, так как страница профиля защищена. токен должен быть проверен. если проверен. он должен отображать страницу профиля. но это не рендеринг, и я не знаю почему. который даже выплевывает ошибки, но вот странная часть. когда я создаю учетную запись пользователя, я зарегистрировал токен JWT и скопировал его. использую его через почтальона. Прикрепил токен к заголовку, затем использовал маршрут профиля, который будет отображать HTML. но в chrome он не делает.
вот видео на YouTube, которое я сделал. https://www.youtube.com/watch?v=ufkor1eVxx8 Надеюсь, что кто-то может просветить меня
вот код для регистрации. (Я буду рефакторинг все).
'use strict';
(function () {
const signInForm = document.getElementById('signup-form');
const username = document.getElementById('signup-username');
const email = document.getElementById('signup-email');
const password = document.getElementById('signup-password');
const signUpBtn = document.getElementById('signup-btn');
signUpBtn.addEventListener('click', (e) => {
e.preventDefault();
axios({
method: 'post',
url: '/signup',
data: {
username: username.value,
email: email.value,
password: password.value
}
})
.then(response => {
console.log(response.data) //check my response working
const token = response.data;
if(token) {
window.localStorage.setItem('access_token', token);
// window.location.assign('/profile');
axios({
method: 'get',
url: '/profile',
headers: {
'Authorization': `Bearer ${token}`,
}
}).then( res => {
console.log(res, 'afsdfas')
if(res.status === 200) {
console.log(res.data.decoded) // decoded JWT working
}
})
.catch( err => {throw err});
} else {
console.log('NO TOKEN');
}
})
.catch(err => { throw err });
})
}());
Вот код для профиля маршрута:
const express = require('express');
const router = express.Router();
const verifyToken = require('../helper.fn/verifyToken');
const jawt = require('../helper.fn/jwt.token');
router.get('/profile', verifyToken, (req, res) => {
// console.log(req.token, 'test'); // token verified here. working.
jawt.checkJWT(req.token)
.then( userDecode => {
console.log(userDecode); // user decoded info working
if(userDecode) {
console.log(userDecode, 'decode') // ! this will run working
res.render('userprofile'); // ! THIS IS THE PROBLEM WONT RENDER
console.log('gasdfas'); // ! this will run
// res.json({userDecode}); this for testing this works
} else {
res.json({ err: 'sumthing is vrong'})
}
})
.catch( err => { throw err})
});
module.exports = router;
вот код для проверки токена:
/**
* this function checks if we a token attached to a header
* @param {Object} req
* @param {Object} res
* @param {function} next
*/
module.exports = function(req, res, next) {
const userToken = req.headers.authorization;
console.log(userToken) // logs the bearer and token
if (!userToken) {
res.status(403).json({
error: "FORBIDDEN"
});
} else {
const token = userToken.split(' ')
console.log(token[1]) i have the token here working
req.token = token[1];
next();
}
};