Fixes issue 17 - Handles rev07 and above of the OAuth spec
This commit is contained in:
parent
b3175f8b21
commit
2c0b8c3b79
@ -87,7 +87,19 @@ exports.OAuth2.prototype.getOAuthAccessToken= function(code, params, callback) {
|
|||||||
this._request("POST", this._getAccessTokenUrl(params), {}, null, function(error, data, response) {
|
this._request("POST", this._getAccessTokenUrl(params), {}, null, function(error, data, response) {
|
||||||
if( error ) callback(error);
|
if( error ) callback(error);
|
||||||
else {
|
else {
|
||||||
var results= querystring.parse(data);
|
var results;
|
||||||
|
try {
|
||||||
|
// As of http://tools.ietf.org/html/draft-ietf-oauth-v2-07
|
||||||
|
// responses should be in JSON
|
||||||
|
results= JSON.parse( data );
|
||||||
|
}
|
||||||
|
catch(e) {
|
||||||
|
// .... However both Facebook + Github currently use rev05 of the spec
|
||||||
|
// and neither seem to specify a content-type correctly in their response headers :(
|
||||||
|
// clients of these services will suffer a *minor* performance cost of the exception
|
||||||
|
// being thrown
|
||||||
|
results= querystring.parse( data );
|
||||||
|
}
|
||||||
var access_token= results["access_token"];
|
var access_token= results["access_token"];
|
||||||
var refresh_token= results["refresh_token"];
|
var refresh_token= results["refresh_token"];
|
||||||
delete results["refresh_token"];
|
delete results["refresh_token"];
|
||||||
|
27
tests/oauth2.js
Normal file
27
tests/oauth2.js
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
var vows = require('vows'),
|
||||||
|
assert = require('assert'),
|
||||||
|
OAuth2= require('../lib/oauth2').OAuth2;
|
||||||
|
|
||||||
|
vows.describe('OAuth2').addBatch({
|
||||||
|
'When handling the access token response': {
|
||||||
|
topic: new OAuth2(),
|
||||||
|
'we should correctly extract the token if received as form-data': function (oa) {
|
||||||
|
oa._request= function( method, url, fo, bar, callback) {
|
||||||
|
callback(null, "access_token=access&refresh_token=refresh");
|
||||||
|
};
|
||||||
|
oa.getOAuthAccessToken("", {}, function(error, access_token, refresh_token) {
|
||||||
|
assert.equal( access_token, "access");
|
||||||
|
assert.equal( refresh_token, "refresh");
|
||||||
|
});
|
||||||
|
},
|
||||||
|
'we should correctly extract the token if received as a JSON literal': function (oa) {
|
||||||
|
oa._request= function( method, url, fo, bar, callback) {
|
||||||
|
callback(null, '{"access_token":"access","refresh_token":"refresh"}');
|
||||||
|
};
|
||||||
|
oa.getOAuthAccessToken("", {}, function(error, access_token, refresh_token) {
|
||||||
|
assert.equal( access_token, "access");
|
||||||
|
assert.equal( refresh_token, "refresh");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}).export(module);
|
Loading…
x
Reference in New Issue
Block a user