Express JWT Error: Not enough or too many segments in socket.io initial auth
Express JWT Error: Not enough or too many segments in socket.io initial auth
在传递令牌和用户名的初始握手期间,我发现了这个奇怪的错误--
{ 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 格式不正确?初始令牌格式错误?
据我所知,此错误是解析 JWT 时未捕获的异常导致的结果,该 JWT 引用的用户不再在数据库中——更常见的情况是 bcrypt 比较或您使用的任何东西发现比较哈希是假的——我已经考虑到了这一点——没有找到我没有找到的用户。当我考虑到这一点时,错误消失了。
这发生在我的 angular 应用程序中,当时我将一个混乱的回调传递到我的 "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");
}
检查您的令牌或加密文本是否具有三段。例如
var segments = token.split('.');
如果segments长度为3则token是正确的。但如果不是,您必须检查您的令牌在创建和验证之间是否已被修改。
如果你使用的是JWT-simple,通过查看源码可以看出,这个错误是由于token格式不正确造成的。
//...
var segments = token.split('.');
if (segments.length !== 3) {
throw new Error('Not enough or too many segments');
}
在传递令牌和用户名的初始握手期间,我发现了这个奇怪的错误--
{ 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 格式不正确?初始令牌格式错误?
据我所知,此错误是解析 JWT 时未捕获的异常导致的结果,该 JWT 引用的用户不再在数据库中——更常见的情况是 bcrypt 比较或您使用的任何东西发现比较哈希是假的——我已经考虑到了这一点——没有找到我没有找到的用户。当我考虑到这一点时,错误消失了。
这发生在我的 angular 应用程序中,当时我将一个混乱的回调传递到我的 "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");
}
检查您的令牌或加密文本是否具有三段。例如
var segments = token.split('.');
如果segments长度为3则token是正确的。但如果不是,您必须检查您的令牌在创建和验证之间是否已被修改。
如果你使用的是JWT-simple,通过查看源码可以看出,这个错误是由于token格式不正确造成的。
//...
var segments = token.split('.');
if (segments.length !== 3) {
throw new Error('Not enough or too many segments');
}