2017-08-05 222 views
2

我已經試過了JwtStrategy實現我取代了NodeJS TypeError('JwtStrategy需要密鑰或密鑰');

  1. User.findOne({ID:jwt_payload.id}與

  2. User.getUserById(jwt_payload._doc._id,(犯錯,用戶)

這裏面user.js的文件 ,我得到了捉迷藏的時候是index.js的錯誤: -

H:\rprfinal\node_modules\passport-jwt\lib\strategy.js:29 
     throw new TypeError('JwtStrategy requires a secret or key'); 
     ^
TypeError: JwtStrategy requires a secret or key 
    at new JwtStrategy (H:\rprfinal\node_modules\passport-jwt\lib\strategy.js:29:15) 
    at module.exports (H:\rprfinal\config\passport.js:10:18) 
    at Object.<anonymous> (H:\rprfinal\index.js:42:29) 
    at Module._compile (module.js:569:30) 
    at Object.Module._extensions..js (module.js:580:10) 
    at Module.load (module.js:503:32) 
    at tryModuleLoad (module.js:466:12) 
    at Function.Module._load (module.js:458:3) 
    at Function.Module.runMain (module.js:605:10) 
    at startup (bootstrap_node.js:158:16) 
    at bootstrap_node.js:575:3 
[nodemon] app crashed - waiting for file changes before starting... 

user.js的文件: -

module.exports.getUserById = function(id, callback){ 
    User.findById(id, callback); 
} 

index.js文件: -

 //Body parser Middleware 
app.use(bodyParser.json()); 

    //Passport Middleware 
app.use(passport.initialize()); 
app.use(passport.session()); 

require('./config/passport')(passport); 

app.use('/users',users); 

passport.js文件: -

const JwtStrategy = require('passport-jwt').Strategy; 
const ExtractJwt = require('passport-jwt').ExtractJwt; 
const User = require('../models/user'); 
const config = require('../config/database'); 

module.exports = function(passport){ 
    let opts = {}; 
    opts.jwtFromRequest = ExtractJwt.fromAuthHeader(); 
    opts.secretOrKey = config.secret; 
    passport.use(new JwtStrategy(opts, (jwt_payload, done) => { 
     User.getUserById(jwt_payload._doc._id, (err, user) => { 
      if(err){ 
       return done(err, false); 
      } 
      if(user){ 
       return done(null, user); 
      } else{ 
       return done(null, false); 
      } 
     }); 
    })); 
} 

和users.js等等H內註冊和驗證

// Authenticate 
router.post('/authenticate',(req, res, next) => { 
const username = req.body.username; 
const password =req.body.password; 

User.getUserBYUsername(username, (err, user) => { 
    if(err) throw err; 
    if(!user){ 
     return res.json({success: false,msg: 'User not found'}); 
    } 
User.comparePassword(password,user.password, (err, isMatch) => { 
    if(err) throw err; 
    if(isMatch){ 
     const token = jwt.sign(user, config.secret, { 
      expiresIn: 604800 // 1 Week 
     }); 

    res.json({ 
     success: true, 
     token: 'JWT '+token, 
     user: { 
      id: user._id, 
      name:user.name, 
      username: user.username, 
      email: user.email 
     } 
    }); 
    } else { 
     return res.json({success: false, msg: 'Wrong password'}); 
    } 
}); 
}); 
}); 
+0

做了'config'返回一個對象名爲'secret'鍵,如果是,是吧'string'或'buffer' –

+0

TQ @ p0k8_我做到了,在配置文件 – Asutosh

回答

-2

嘗試:

const config = require('./config/database'); 
+0

上有一個祕密拼寫錯誤,只是放一個命令來執行並不是一個好的答案,試圖解釋爲什麼執行可以解決問題 –