错误:401(未授权),Passport身份validation在节点中
Passport身份validation中间件在这里使用,从loginapi我有一个jwt令牌生成,它发送到API http:// localhost:3030 / home / in标题,但它的投掷
错误
angular.js:12587 POST http:// localhost:3030 / home / 401(未经授权)。
{“data”:“Unauthorized”,“status”:401,“config”:{“method”:“POST”,“transformRequest”:[null],“transformResponse”:[ null],“jsonpCallbackParam”:“callback”,“url”:“ http:// localhost:3030 / home / ”,“headers”:{“Accept”:“application / json,text / plain, / ”}} “状态文本”:“未授权”}
route.js
module.exports = function(app , passport){ app.use('/login',userCtrl); app.use('/register',registerCtrl); app.use('/home', passport.authenticate('jwt', { session: false }) , homerCtrl); };
passposrt.js
var JwtStrategy = require('passport-jwt').Strategy, ExtractJwt = require("passport-jwt").ExtractJwt; var config = require('./appConfig.js'); module.exports = function(passport){ var jwtOptions = {} jwtOptions.jwtFromRequest = ExtractJwt.fromAuthHeader(); jwtOptions.secretOrKey = config.secret; var strategy = new JwtStrategy(jwtOptions, function(jwt_payload, next) { var user = users[_.findIndex(users, {id: jwt_payload.id})]; if (user) { next(null, user); } else { next(null, false); } }); passport.use(strategy); }
家庭控制器
var mongoose = require("mongoose"); var User = mongoose.model("user"); var express = require("express"); var jwt = require('jsonwebtoken'); var config = require('./../config/appConfig.js'); //Type 1 using router var router = express.Router(); router.post('/' , function(req, res, next){ var formData = req.body; getUserData(formData , function(user){ res.json({ "responseMessage" : "Home Api Sucess" }); }); }); function getUserData(formData , cb){ User.findOne({username : formData.username}).then(function(user){ cb(user); }).catch(function(err){ cb(err); }); } module.exports = router;
login控制器
var router = express.Router(); router.post('/' , function(req, res, next){ var formData = req.body; var username = req.body.username; var password = req.body.password; getUserData(formData , function(user){ if(user){ user.verifyPassword(password , function(err, isMatch){ if(isMatch){ var token = createToken(user); res.json({ "responseMessage" : "Login Sucess" , "token" :token}); }else{ res.json({ "responseMessage" : "Login Failed" }); } }) }else{ res.json({ "responseMessage" : "Login Failed" }); } }); }); function createToken(user){ var payload = {id: user.name}; var token = jwt.sign(payload, config.secret); return "JWT " +token; } function getUserData(formData , cb){ User.findOne({username : formData.username}).then(function(user){ cb(user); }).catch(function(err){ cb(err); }); }
在passport.js
取代
jwtOptions.jwtFromRequest = ExtractJwt.fromAuthHeader();
同
jwtOptions.jwtFromRequest = ExtractJwt.fromAuthHeaderWithScheme('JWT');
您必须为每个受保护的路由发送授权标头。
看邮递员的例子:
PS:您必须在login过程中创build一个JWT令牌。
希望它可以帮助你。
- Node.js / Express将全部redirect到angular度2页面
- Node azure blobService.generateSharedAccessSignature()返回一个不正确的标记
- PassportJS events.js:160 //未处理的错误连接超时
- 在摩卡和SuperTest中设置基本身份validation
- 当请求来自另一个域时,如何在sailsJS后端应用程序中坚持authentication状态?
- 了解如何使用NodeJS创build一个简单的后端
- 使用本地策略进行身份validation时,Passportjs引发500服务器错误
- node.js:在获取请求成功validation后,提供文件(特别是apk)
- 具有“持久性标记”function的Node.js身份validation库
- 限制对所有路线的访问权限
- RESTful API是否会返回不同的状态码或令牌过期和未经授权的错误消息?