Это не первый раз, но я не знаю, почему jsonwebtoken не работает с первым приложением я много раз пытался достичь некоторой страницы, которая должна иметь определенный токен, чтобы достичь, и я получил доступ к этому токену, поэтому при попытке достичь этой страницы он говорит мне, что нет предоставленного токена,
Я уверен, что мой код полностью правильный и я спросил на stack overflow и никто не ответил на этот раз я попробовал кое-что другое, что является 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}`)
}) ;
Эта проблема отняла у меня много времени, пожалуйста, помогите мне решить ее.