jwt 인증에 문제가 있습니다.

4360 단어
이것은 처음이 아니지만 jsonwebtoken이 첫 번째 응용 프로그램에서 작동하지 않는 이유를 모르겠습니다. 이 페이지에 도달하려고 할 때 특정 토큰이 필요한 페이지에 도달하기 위해 많은 노력을 기울였습니다. 제공된 토큰이 없다고 알려줍니다.
나는 내 코드가 완전히 옳다고 확신하고 스택 오버플로에 대해 물었고 이번에는 아무도 대답하지 않았습니다. 나는 passport-jwt와 여전히 코드가 작동하지 않는 인증이 작동하지 않는 다른 것을 시도했습니다.

const express = require("express") ;
const router = express.Router() ;
const bcrypt = require ("bcryptjs")
const passport = require("passport") ;
const passportJwt = require("passport-jwt")
const jwt = require ("jsonwebtoken") ;

const User = require("../models/userModel.js")
require("../config/passport.js")(passport)
//register

router.post("/signup" , (req ,res)=>{

  let newUser = new User({
    name : req.body.name,
    email:req.body.email ,
    password:req.body.password
  })
  User.addUser(newUser , (err , user)=>{
    if (err){
      res.json({success:false , msg:"failed to register"+err})
    }else {
      res.json({success:true , msg:"register is done"})
    }
  })
})
router.post("/authenticate" , (req ,res)=>{
  let email = req.body.email ;
  let password = req.body.password ;

  User.getUserByEmail(email , (err , user)=>{
    if(err)throw err
    if(!user){
      return res.send({success:false , msg:"this email is not exist"})
    }else{
      User.comparePassword(password , user.password , (err , isMatch)=>{
        if (err) throw err ;
        if(isMatch){
          const token = jwt.sign({id:user._id} , "hello secret" )
          res.json({
            success:true ,
            token:"JWT "+token ,
            user:{
              id:user._id ,
              name:user.name,
            }
          })
        }else{
          res.send({success:false , })
        }
      })
    }
  })

})
router.get("/profile",passport.authenticate('jwt' , {session:false}) , (req ,res,next)=>{
  res.send("here's your profile")
})


module.exports = router ;


이것은 userRoute.js라는 경로의 코드입니다.
및 passport.js 파일의 코드는 다음과 같습니다.

const JwtStrategy = require('passport-jwt').Strategy;
const  ExtractJwt = require('passport-jwt').ExtractJwt;
const User = require ("../models/userModel.js")

module.exports = function(passport){
let opts = {}
opts.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken();
opts.secretOrKey = 'hello secret';
opts.issuer = 'accounts.examplesoft.com';
opts.audience = 'yoursite.net';
passport.use(new JwtStrategy(opts, function(jwt_payload, done) {
    User.findOne({id: jwt_payload.sub}, function(err, user) {
        if (err) {
            return done(err, false);
        }
        if (user) {
            return done(null, user);
        } else {
            return done(null, false);
            // or you could create a new account
        }
    });
}));
}



다음은 app.js 파일입니다.

const express = require("express") ;
const path = require ("path") ;
const bodyParser = require ("body-parser") ;
const passport = require("passport") ;
const cors = require("cors")
const mongoose = require("mongoose") ;
const userRoute = require("./routes/userRoute.js")
const config = require("./config/dbConfig.js")
var session = require('express-session');
const app = express() ;

//connecting to the database
mongoose.connect(config.database)
mongoose.connection.on('connected' ,  ()=>{
  console.log("hello world")
})
//port number

const port = 3000 ;
//cors
app.use(session({ secret: 'hello secret' }));
app.use(cors()) ;
//set static folder
app.use(express.static(path.join(__dirname , "Notes-master")));
//body parser
app.use(bodyParser.json()) ;

//using data from routes
app.use(passport.initialize());
app.use(passport.session());
require("./config/passport")(passport);
app.use(userRoute)

app.get("/", (req , res)=>{
  res.send("here's home")
})
// passport authentication
//server listening

app.listen(port , ()=>{
  console.log(`server started on a port ${port}`)
}) ;



이 문제는 내 시간을 많이 낭비했습니다. 해결하도록 도와주세요.

좋은 웹페이지 즐겨찾기