Я пытаюсь сделать страницу профиля для пользователя в моем проекте без использования пароля. js для аутентификации. Я создал свое промежуточное программное обеспечение для аутентификации, которое называется check-auth. js. Я использую бессонницу для доступа к своим профилям с помощью токена. Я получаю ошибку от check-auth. js. Кто-нибудь может мне помочь в этом вопросе? Спасибо
- Это промежуточное ПО для аутентификации (check-auth. js)
const jwt = require('jsonwebtoken')
const HttpError = require('../models/HttpError')
module.exports = (req, res , next) => {
if(req.method === 'OPTIONS'){
return next()
}
try {
const token = req.headers.authorization.split(' ')[1] //We took token from headers authorization.( Bearer 'token')
if(!token){ // We check token if it is falsy.If it is, We will send error for authentication failed
throw new Error('Authentication failed')
}
const decodeToken = jwt.verify(token,process.env.JWT_SECRET_KEY) // for verifying token we need token and our secret key.
console.log(decodeToken.userId)
console.log(req.isLoggedIn)
req.userData = {userId:decodedToken.userId} // We will use userid to delete and edit recipes and meals. we need that.
next() // It is authenticated go next middleware
}
catch(err){ // if our token does not match with the token.
const error = new HttpError('Authentication failed mi', 403)
return next(error) // Send error
}
}
2-Это мой пользовательский контроллер для страницы профиля. (Пользователи. js)
const profile = async(req, res, next) => {
let existingUser
try{
existingUser = await User.findById(req.userData.userId,'-password').exec()
}
catch(err){
const error = new HttpError('Profile failed, please try again', 500)
return next(error)
}
if(!existingUser){
const error = new HttpError('User does not exist',422)
}
res.status(200).json({user:existingUser.toObject({getters:true})})
}
3-Это мои маршруты для пользователя (user-маршруты)
const express = require('express')
const {check} = require('express-validator')
const router = express.Router()
const usersController = require('../controllers/users')
const checkAuth = require('../middleware/check-auth')
router.post('/signUp', [
check('username').not().isEmpty(),
check('age').not().isEmpty(),
check('gender').not().isEmpty(),
check('email').normalizeEmail().isEmail(),
check('password').isLength({min:6})
],usersController.signUp)
router.post('/login',[
check('email').normalizeEmail().isEmail(),
check('password').isLength({min:6})
],usersController.login)
router.use(checkAuth)
router.get('/profile',usersController.profile)
module.exports = router