Express JWT错误:socket.io初始身份验证中没有足够或太多的段

时间:2015-05-27 18:10:19

标签: javascript authentication socket.io jwt express-jwt

在初始握手期间,传递了令牌和用户名,我抓住了这个奇怪的错误 -

    { handle: 10,
      type: 'error',
      className: 'Error',
      constructorFunction: { ref: 11 },
      protoObject: { ref: 12 },
      prototypeObject: { ref: 3 },
      properties: 
      [ { name: 'stack',
          attributes: 2,
          propertyType: 3,
          ref: 3 },
        { name: 'arguments',
          attributes: 2,
          propertyType: 1,
          ref: 3 },
        { name: 'type',
          attributes: 2,
          propertyType: 1,
          ref: 3 },
        { name: 'message',
          attributes: 2,
          propertyType: 1,
          ref: 13 } ],
        text: 'Error: Not enough or too many segments' }

JWT格式错误?初始令牌格式错误?

4 个答案:

答案 0 :(得分:6)

据我所知,这个错误是解析引用不再在db中的用户的JWT的未捕获异常的结果 - 更常见的情况是当bcrypt比较或者你正在使用的任何东西时发现比较哈希是假的 - 这是我考虑过的 - 没找到我没有的用户。当我考虑到这个时,错误就消失了。

答案 1 :(得分:5)

如果您使用的是简单的JWT,通过查看源代码,我们可以看到此错误是由具有错误格式的令牌引起的。

//...

var segments = token.split('.');
if (segments.length !== 3) {
  throw new Error('Not enough or too many segments');
}

答案 2 :(得分:0)

当我把一个混乱的回调传递到我的“then”语句中时,我的角度应用程序中发生了这种情况。

// in my Auth Service

this.register = function (email, password) {
  return $http.post(API_URL + 'register', {
    email: email,
    password: password
  }).then(authSuccessful)
    .catch(authError);
};

function authSuccessful(res) {
  alert('success', 'Joy!', 'Welcome, ' + res.data.user.email + '.');
  // authToken.setToken just puts the token in local storage.
  authToken.setToken(res.token); // <- WRONG!!
  $state.go("connections");
}

应该是:

function authSuccessful(res) {
  alert('success', 'Joy!', 'Welcome, ' + res.data.user.email + '.');
  authToken.setToken(res.data.token); // <- Yay!
  $state.go("connections");
}

答案 3 :(得分:0)

检查您的令牌或加密文本是否有三段。对于前。

var segments = token.split('.');

如果段长度为3,那么令牌是正确的。但如果不是,则必须检查您的令牌是否已在创建和验证之间进行了修改。