Попытка профилировать маршруты на Backend с node js без использования паспорта. js для аутентификации - PullRequest
2 голосов
/ 24 февраля 2020

Я пытаюсь сделать страницу профиля для пользователя в моем проекте без использования пароля. js для аутентификации. Я создал свое промежуточное программное обеспечение для аутентификации, которое называется check-auth. js. Я использую бессонницу для доступа к своим профилям с помощью токена. Я получаю ошибку от check-auth. js. Кто-нибудь может мне помочь в этом вопросе? Спасибо

  1. Это промежуточное ПО для аутентификации (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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...