当前位置: 首页 > 知识库问答 >
问题:

错误:401(未授权),节点中的护照身份验证

公冶峰
2023-03-14

这里使用Passport身份验证中间件,从登录api生成jwt令牌并发送到apihttp://localhost:3030/home/在头球,但它的投掷

错误

有棱角的js:12587员额http://localhost:3030/home/401(未经授权)。

angular.js:14525可能未处理的拒绝:{数据:未授权,状态:401,配置:{方法:POST,转换请求:[空],转换响应:[空],jsonpCallbackParam:回调,url:http://localhost:3030/home/,标头:{接受:应用/json,文本/纯, /"}},"状态文本":"未授权"}

路线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;

登录控制器

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);
    });
}

共有2个答案

戎兴言
2023-03-14

您必须为每个受保护的路由发送授权标头。

请参阅使用Postman的示例:

附言:你必须在登录过程中创建一个JWT令牌。

希望它能帮助你。

苏振国
2023-03-14

passport.js中替换

jwtOptions.jwtFromRequest = ExtractJwt.fromAuthHeader();

具有

jwtOptions.jwtFromRequest = ExtractJwt.fromAuthHeaderWithScheme('JWT');
 类似资料:
  • 我正在尝试使用基本身份验证获取url。我设置用户/密码如下所示。同样的凭证在邮递员中工作。 我认为凭据设置不正确。这里怎么了?错误:

  • 我的代码:GoogleCredential凭据 credential.refreshToken() 错误日志: 创建服务号的步骤: 我在凭据中的oauth 2.0中创建了一个Web应用程序 然后我用客户端ID创建了一个服务号 现在我正在使用这个服务号和从它生成的p12证书来验证和创建Google凭据的对象 一旦刷新令牌,我就给了我401例外。 在这种情况下,任何帮助都会受到感激

  • 成功使用带有Azure AD v2身份验证的图形endpoint。一切都很完美。 图形终结点不支持outlook任务,因此需要使用outlook api终结点outlook.office.com/api。 我在使用scope参数进行身份验证时建立作用域。使用相同的代码,只是不同的endpoint。 https://graph.microsoft.com/beta/me/messages-工作htt

  • 我是Spring boot和Spring Security的新手,出现以下错误: “错误401未经授权(c.e.l.security.jwt.AuthEntryPointJwt:未经授权的错误:访问此资源需要完全身份验证)” 我试过这个认证 我的问题是,当我成功登录时,我想请求获取用户列表。我发送的请求是一个安全GET请求,它是http://localhost:8084/loginsystem/a

  • 我试图测试Firebase Cloud messaging APIs,因为控制台没有提供所有功能(特别是当应用程序在后台时定制通知)。但由于某些原因,我无法让它工作,它总是显示401错误。我调查了出现这种情况的原因,并在重新生成新的服务器密钥后进行了尝试,但错误仍然存在。令人惊讶的是,当我生成一个新的服务器密钥时,它没有反映在Firebase控制台中,它将服务器密钥显示为空。此外,我尝试添加我的I