【问题标题】:Unauthorized: Error 401 passport-jwt未经授权:错误 401 护照-jwt
【发布时间】:2017-10-18 04:56:38
【问题描述】:

passport.js

var jwtOptions = {
        jwtFromRequest: ExtractJwt.fromAuthHeader(),
        secretOrKey: config.secret
    }

    var jwtLogin = new JwtStrategy(jwtOptions, function (jwt_payload, done) {
        console.log('payload received', jwt_payload);
        User.findOne(jwt_payload._id, function (err, user) {
            if (err) {
            return done(err, false,{error:'its failed'});
        }
        if (user) {
            return done(null, user);
        }
        else {
            done(null, false,{error:'401'});
        }
    });
});

passport.use(jwtLogin);

Authentication.js

function generateToken(user) {
    return jwt.sign(user, key.secret, {
        expiresIn: '1h',
    });
};

function setUserInfo(request) {
    console.log('inside setUserInfoo', request);
    return {
        _id: request._id,
        email: request.email,

    }
};
exports.login = function (req, res, next) {
    console.log('inside login function');
    var userInfo = setUserInfo(req.user);
    res.status(200).json({
        token: generateToken(userInfo), //removed 'JWT' + generrateToken...Reading your answers.
        user: userInfo
    });
};

routes.js

//Assuming every thing is required correctly.

var requireAuth = passport.authenticate('jwt',{session:false});

 app.use('/api/contacts', contactRoutes);

    contactRoutes.get('/',requireAuth, function(req,res){
        console.log('inside get route of contacts');
        contactControllers.getContacts(req,res)});

    contactRoutes.post('/', requireAuth, function (req, res) {
        console.log("inside post routes of contacts");
        contactControllers.postContacts(req, res); //logic is correct but generate token syntax is similar to login function one.
    });

服务类 .ts

获取数据。

getContacts() {
    console.log('Inside getContacts() of service class');
    return new Promise((resolve, reject) => {
      let headers = new Headers();
      headers.append('Authorization', this.auth.token);
      console.log('inside promise');

      this.http.get('http://localhost:8080/api/contacts/', { headers: headers }).map(res =>
        res.json())
        .subscribe(data => {
          resolve(data);
          console.log('inside resolve of service class', data);
        },
        (err) => {
          reject(err);
        });
    });
  }

我在这里没有使用授权,只有身份验证。当从服务类调用get 发布时,它显示未经授权。请帮助。

在 Authentication.js 文件中,我使用了 Token: 按照你对一些帖子的回答,我已经删除了“JWT”。但是也显示了 401 Unauthorized 错误。

请帮忙!

【问题讨论】:

  • 如果你真的想得到帮助,你应该提供更多关于你的问题的细节。例如:console.log 输出和标题中的转储。

标签: javascript node.js authentication


【解决方案1】:

你可以试试这个:

headers.append('Authorization', 'Bearer ${this.auth.token}');

【讨论】:

    【解决方案2】:
    headers.append('Authorization', 'JWT ' + this.auth.token);
    

    【讨论】:

    • 您的日志中出现了什么?
    • 401..unauthorized
    • 我可以在您的代码中看到一些console.log。他们都没有被调用过?
    【解决方案3】:

    在您的服务文件中的 headers.append() 中,您要求授权,将其切换到身份验证并查看是否有效

    【讨论】:

    • 尝试将我的答案与上面的答案结合起来,使其看起来像 headers.append('Authorization', 'JWT', + this.auth.token);
    • 只是想知道,您是否通过 mongo shell 为您当前使用的数据库设置了用户和密码?
    • 是的,我已经设置了用户/密码,即使我可以登录,但是当我登录时,页面未经授权。
    • 的意思是在我的第三个答案中说 Authentication btw 不是 Authorization ,但是如果您登录到 mongo shell 比那里还好,那在 passport.js 中这两个 if 语句是怎么回事?你应该使用 else if ^
    猜你喜欢
    • 2018-02-04
    • 2018-05-19
    • 2018-03-18
    • 2021-11-30
    • 2019-02-01
    • 2019-08-29
    • 2021-09-24
    • 1970-01-01
    • 2018-06-06
    相关资源
    最近更新 更多