2013-03-14 3 views
0

노드 0.8.20에서 내 앱을 개발 중이며 Google 인증을 위해 여권을 사용하고 있습니다.NodeC 업데이트 후 charCodeAt에서 오류가 발생했습니다.

나는 최신 버전 0.10으로 내 노드를 업데이트하고 난 오류

_modules\passport-openid\node_modules\openid\lib\convert.js:33 
    if(i.charCodeAt(0) > 127) 
    ^
TypeError: Object n++n++:?n++9rn++??n++n+++ón++1??7q~n++n++qn++v#s?fn++?n++Z.'n+ 
has no method 'charCodeAt' 

나는 여권과 여권 구글 모듈의 최신 버전으로 업데이트 한을 얻을, 그것은 도움이 보인다 dosent.

여권 공동체에서 이와 관련하여 제기 된 문제는 없습니다. 그래서 내 코드와 관련이 있다고 생각합니다.

업데이트 : 이 오류는 노드 0.10과 관련이 없습니다. 존재 범위는 0.9입니다. 제안 된 해결 방법은 Google oauth로 이동하는 것입니다. 아직 해결 방법 없음

도움이 될 것입니다.

답변

3

노드의 crypto 모듈이 버전 0.9.0부터 기본값으로 바이너리 문자열 대신 버퍼 객체를 반환하는 것처럼 보입니다.

이 DIFF는 문제가 해결됩니다 :

diff --git node_modules/passport-google/node_modules/passport-openid/node_modules/openid/openid.js node_modules/passport-google/node_modules/passport-openid/node_modules/openid/openid.js 
index 1431dd7..798f741 100644 
--- node_modules/passport-google/node_modules/passport-openid/node_modules/openid/openid.js 
+++ node_modules/passport-google/node_modules/passport-openid/node_modules/openid/openid.js 
@@ -634,9 +634,9 @@ openid.associate = function(provider, callback, strict, algorithm) 
    if(algorithm.indexOf('no-encryption') === -1) 
    { 
    dh = _createDiffieHellmanKeyExchange(algorithm); 
- params['openid.dh_modulus'] = _toBase64(dh.getPrime()); 
- params['openid.dh_gen'] = _toBase64(dh.getGenerator()); 
- params['openid.dh_consumer_public'] = _toBase64(dh.getPublicKey()); 
+ params['openid.dh_modulus'] = _toBase64(dh.getPrime("binary")); 
+ params['openid.dh_gen'] = _toBase64(dh.getGenerator("binary")); 
+ params['openid.dh_consumer_public'] = _toBase64(dh.getPublicKey("binary")); 
    } 

    _post(provider.endpoint, params, function(data, headers, statusCode) 
@@ -713,10 +713,10 @@ openid.associate = function(provider, callback, strict, algorithm) 
     else 
     { 
     var serverPublic = _fromBase64(data.dh_server_public); 
-  var sharedSecret = convert.btwoc(dh.computeSecret(serverPublic)); 
+  var sharedSecret = convert.btwoc(dh.computeSecret(serverPublic, "binary", "binary")); 
     var hash = crypto.createHash(hashAlgorithm); 
     hash.update(sharedSecret); 
-  sharedSecret = hash.digest(); 
+  sharedSecret = hash.digest("binary"); 
     var encMacKey = convert.base64.decode(data.enc_mac_key); 
     secret = convert.base64.encode(_xor(encMacKey, sharedSecret)); 
     } 
+0

나를 위해 일했다! 감사! – drorw

관련 문제