尝试在节点中实现JWT身份validation。 在受保护的路线上获得未经授权
我正在尝试实施JWT身份validation。 /login和/注册工作正常,他们返回身份validation令牌,但是当我尝试GET /秘密头'授权'='JWT token_received',它返回一个string'未经授权',我可以看到从JWTStrategy没有日志logging。 请让我知道我要去哪里错了。
var opts = {} opts.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken(); opts.secretOrKey = "very_secret" passport.use(new JwtStrategy(opts, function(payload, next){ console.log("payload received" + payload); User.findById(payload.id, function(err, user){ console.log("user found:" + user); if(err){ return next(err, false) } else if(user){ return next(null, user) } else{ return next(null, false) } }); } )); app.use(passport.initialize()); app.post("/login", function(req, res){ var email = req.body.email; var password = req.body.password; var user = User.findOne({"email": email}, function(err, user){ if(err){ res.json({"error": err}); return; } if(!user){ res.json({"message": "No user found"}); return; } if(user.password == password){ res.json( { "message": "User found", "token": jwt.sign({"id": user.id}, opts.secretOrKey) } ); } else{ res.json({"message": "Password did not match"}); } }); }); app.post("/register", function(req, res){ new User({ email: req.body.email, password: req.body.password}). save(function(err, user){ if(err){ res.json({"message": "User cannot be created"}); } else{ res.json( { "message": "ok", "token": jwt.sign({"id": user.id}, opts.secretOrKey) } ); } }); }); app.get("/secret", passport.authenticate("jwt", {session: false}), function(req, res){ console.log(req.get('Authorization')); res.json(req.user); });
使用邮递员作为客户端。 从邮递员,
GET /secret HTTP/1.1 Host: localhost:3000 Content-Type: application/x-www-form-urlencoded Authorization: JWT token_I_received_on_login Cache-Control: no-cache Postman-Token: 114060a3-3074-6688-6245-0b0cfe7e9f04
得到它了。 在请求中犯了一个错误。
根据自述文件 ,它应该是'Authorization'='不记名token_received_on_login'
opts.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken();
应该
ExtractJwt.fromAuthHeaderWithScheme('jwt');
- 使用nodejs web服务器validation用户,但没有框架
- NodeJS / Firebase承诺的范围
- 套接字build立后的socket.ioauthentication
- 如何debugging护照
- 通过Node.js项目存储通用authentication详细信息的强大方法是什么?
- 第三方用户使用电子validation
- “错误:非法参数:string,未定义”,并在节点JS中停止服务器
- 如何访问passport.deserializeUser中的node-orm2 Express中间件
- NodeJS:在客户端存储JWT的地方? sessionStorage,localStorage还是cookies?