jwt 인증에 문제가 있습니다.
나는 내 코드가 완전히 옳다고 확신하고 스택 오버플로에 대해 물었고 이번에는 아무도 대답하지 않았습니다. 나는 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}`)
}) ;
이 문제는 내 시간을 많이 낭비했습니다. 해결하도록 도와주세요.
Reference
이 문제에 관하여(jwt 인증에 문제가 있습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/samir404/i-have-an-issue-in-the-auhtentication-with-jwt-2532텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)