2015-08-12 1 views
0

Стараюсь аутентификации пользователя Evernote с узлом JS, все работает отлично, пока обратный вызов URL не называется, то я получаю сообщение об ошибке с кодом состояния 400Evernote узел SDK, не в состоянии проверить подлинность

Моим кода:

app.get('/api/auth/authenticate', function(req, res){ 

    var client = new Evernote.Client({ 
     consumerKey: evernoteConfig.EVERNOTE_CONSUMER_KEY, 
     consumerSecret: evernoteConfig.EVERNOTE_CONSUMER_SECRET, 
     sandbox: true 
    }); 

    client.getRequestToken(evernoteConfig.callbackURL, function(error, 
     oauthToken, oauthTokenSecret, results){ 

     if(error) { 
     req.session.error = JSON.stringify(error); 
     res.json("Shit:"+req.session.error); 
    } 
    else { 
     // store the tokens in the session 
     req.session.oauthToken = oauthToken; 
     req.session.oauthTokenSecret = oauthTokenSecret; 

     // redirect the user to authorize the token 
     res.redirect(client.getAuthorizeUrl(oauthToken)); 
    } 
    }); 

}); 

app.get('/api/auth/evernote/callback', function(req, res){ 
    var client = new Evernote.Client({ 
    consumerKey: evernoteConfig.API_CONSUMER_KEY, 
    consumerSecret: evernoteConfig.API_CONSUMER_SECRET, 
    sandbox: true 
}); 

client.getAccessToken(
    req.session.oauthToken, 
    req.session.oauthTokenSecret, 
    req.param('oauth_verifier'), 
    function(error, oauthAccessToken, oauthAccessTokenSecret, results) { 
    if(error) { 
     res.json("Error:"+JSON.stringify(error)); 
    } else { 
    // store the access token in the session 
     req.session.oauthAccessToken = oauthAccessToken; 
     req.session.oauthAccessTtokenSecret = oauthAccessTokenSecret; 
     req.session.edamShard = results.edam_shard; 
     req.session.edamUserId = results.edam_userId; 
     req.session.edamExpires = results.edam_expires; 
     req.session.edamNoteStoreUrl = results.edam_noteStoreUrl; 
     req.session.edamWebApiUrlPrefix = results.edam_webApiUrlPrefix; 
     res.json("Success"); 
    } 
}); 
}); 

Я понятия не имею, что я делаю не так ... Может быть, кто-то из вас есть еще некоторый опыт работы с Evernote JS SDk

ответ

0

Посмотрите на свой OAuth Verifier и убедитесь, что это правильно. Я написал (относительно непроверенный) regrex для правильного захвата верификатора OAuth. Мой (рабочий) код в противном случае очень похожи:

function getOauthVerifier(url) { 
     var regex = new RegExp("[\\?&]oauth_verifier=([^&#]*)"), 
     results = regex.exec(url); 
    return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " ")); 
} 

...

else if (pathname == "/oauth"){ 
    client.getAccessToken(
     global.oauthToken, 
     global.oauthSecret, 
     getOauthVerifier(params.search), 
     function(error, oauthAccessToken, oauthAccessTokenSecret, results) { 
     if(error) { 
      console.log("error\n\n\n"); 
      console.log(error); 
     } 
     else { 
      response.writeHead(200, {"Content-Type":"text/html"}); 
      response.write(oauthAccessToken); 
      response.end(); 
     } 
     } 
    ); 
    } 
    else { 
    response.writeHead(200, {"Content-Type":"text/html"}); 
    response.write("not a valid URL <a href=\"/\"> GO HOME </a>"); 
    response.end(); 
    } 

Полный пример: https://discussion.evernote.com/topic/80668-oauth-does-not-work-in-js/#entry341806