获取印象笔记开发token时Nodejs报错401,求助

获取印象笔记开发token时Nodejs报错401,求助

先上自己的代码,其实和readme中的一模一样… var Evernote = require(“Evernote”).Evernote; var client = new Evernote.Client({ consumerKey: My_Consumer_Key, consumerSecret: My_Consumer_Secret }); client.getRequestToken(‘http://220.231.xx.xx/getToken.html’, function (error, oauthToken, oauthTokenSecret, results) { console.log(“oauthToken:” + oauthToken); console.log(“oauthTokenSecret:” + oauthTokenSecret); console.log(’-----------获取token---------------------’); client.getAccessToken(oauthToken, oauthTokenSecret, function (error, oauthAccessToken, oauthAccessTokenSecret, results) { // store ‘oauthAccessToken’ somewhere console.log(error); console.log(“oauthAccessToken:” + oauthAccessToken); console.log(“results:” + results); }); }); 遇到问题:第二次访问返回结果为:statusCode: 401。 对比evernote模块readme来做,没搞定,诚心求教~~为了方便,贴出readme相关代码: npm install evernote

### OAuth ###
```javascript
var client = new Evernote.Client.new({
  consumerKey: 'YOUR API CONSUMER KEY',
  consumerSecret: 'YOUR API CONSUMER SECRET',
  sandbox: [true or false] // Optional (default: true)
});
client.getRequestToken('YOUR CALLBACK URL', function(error, oauthToken, oauthTokenSecret, results) {
  // store tokens in the session
  // and then redirect to client.getAuthorizeUrl(oauthToken)
});

To obtain the access token

client.getAccessToken(oauthToken, oauthTokenSecret, oauthVerifier, function(error, oauthAccessToken, oauthAccessTokenSecret, results) {
  // store 'oauthAccessToken' somewhere
});
请注意oauthVerifier参数,不知道从哪里获取- -第一步返回结果确实木有~最近几天gogole上不去,特来坛子问问各路大神~

2 回复

针对您在获取印象笔记(Evernote)开发token时遇到的401 Unauthorized错误,我将为您详细分析可能的原因,并提供一些调试建议和修正后的代码。

首先,401错误通常表示未经授权的访问。这可能是由于以下几个原因导致的:

  1. OAuth流程未正确完成:确保您的OAuth流程完全正确地执行了所有步骤,包括获取请求令牌、用户授权以及最终获取访问令牌。
  2. 缺少或错误的oauthVerifier参数:在调用getAccessToken方法时,需要一个有效的oauthVerifier参数,该参数通常是在用户通过Evernote的授权页面后重定向回您的应用时提供的。
  3. 回调URL配置错误:确保您的回调URL与Evernote开发者控制台中注册的应用设置一致。
  4. 使用沙盒环境:如果您正在使用沙盒环境进行测试,请确保您的客户端初始化时正确设置了sandbox参数为true

基于上述分析,这里是一个修正后的示例代码,假设您已经有一个回调URL可以接收授权后的oauthVerifier参数:

var Evernote = require('evernote').Evernote;

const client = new Evernote.Client({
  consumerKey: 'YOUR_CONSUMER_KEY',
  consumerSecret: 'YOUR_CONSUMER_SECRET',
  sandbox: true // 如果您正在使用沙盒环境,请将其设置为true
});

// 获取请求令牌
client.getRequestToken('http://your-callback-url.com/callback', function(error, oauthToken, oauthTokenSecret, results) {
  if (error) throw error;
  
  console.log(`Request Token: ${oauthToken}`);
  console.log(`Token Secret: ${oauthTokenSecret}`);

  // 重定向用户到Evernote授权页面
  const authorizeUrl = client.getAuthorizeUrl(oauthToken);
  console.log(`Please visit ${authorizeUrl} to authorize the application.`);
});

// 在回调函数中处理授权后的回调
app.get('/callback', function(req, res) {
  const oauthToken = req.query.oauth_token;
  const oauthVerifier = req.query.oauth_verifier;

  if (!oauthToken || !oauthVerifier) {
    return res.send('Authorization failed.');
  }

  client.getAccessToken(oauthToken, null, oauthVerifier, function(error, oauthAccessToken, oauthAccessTokenSecret, results) {
    if (error) {
      console.error(error);
      return res.send('Failed to get access token.');
    }

    console.log(`Access Token: ${oauthAccessToken}`);
    console.log(`Access Token Secret: ${oauthAccessTokenSecret}`);

    // 将access token存储起来用于后续API调用
    res.send('Authorization successful. You can close this tab.');
  });
});

注意

  • 确保将YOUR_CONSUMER_KEYYOUR_CONSUMER_SECRET替换为您的实际Evernote应用密钥。
  • http://your-callback-url.com/callback应替换为您实际的回调URL。
  • 上述代码示例假设您正在使用Express.js框架处理回调请求。如果没有使用任何Web框架,您需要相应调整这部分逻辑以适应您的应用架构。

希望这些信息能帮助您解决遇到的问题!如果还有其他疑问或需要进一步的帮助,请随时提问。


在获取印象笔记(Evernote)开发token的过程中遇到401错误通常是因为OAuth流程中的某个步骤出现了问题。以下是一些可能的原因及解决方法:

  1. 回调URL不匹配:确保你在客户端创建时设置的回调URL与在Evernote开发者门户中注册的应用程序回调URL一致。

  2. 缺少oauthVerifier:在调用getAccessToken方法时,除了oauthTokenoauthTokenSecret之外,还需要提供oauthVerifier参数。这个值是在用户授权后重定向回你的应用时包含在URL中的。你可以从授权页面的URL中提取该参数。

  3. 沙箱环境:如果你正在使用沙箱环境(sandbox),确保在创建客户端时设置了sandbox: true

  4. 过期的Token:如果已经有一个有效的token,确保不要重复生成新的token,否则可能会导致之前获取的token失效。

  5. 验证授权状态:确认用户已成功授权你的应用访问其Evernote账户。

下面是修正后的示例代码:

var Evernote = require('evernote').Evernote;
var client = new Evernote.Client({
  consumerKey: 'My_Consumer_Key',
  consumerSecret: 'My_Consumer_Secret',
  sandbox: true // 使用沙箱环境
});

// 请求token
client.getRequestToken('http://220.231.xx.xx/getToken.html', function(error, oauthToken, oauthTokenSecret, results) {
  console.log("oauthToken:" + oauthToken);
  console.log("oauthTokenSecret:" + oauthTokenSecret);
  
  // 用户被重定向到Evernote的授权页面后,会携带oauth_token和oauth_verifier回到你的回调URL
  // 假设这里是从回调URL中解析出了oauthVerifier
  var oauthVerifier = "oauth_verifier_value";
  
  client.getAccessToken(oauthToken, oauthTokenSecret, oauthVerifier, function(error, oauthAccessToken, oauthAccessTokenSecret, results) {
    if (error) {
      console.error(error);
    } else {
      console.log("oauthAccessToken:" + oauthAccessToken);
      console.log("results:" + JSON.stringify(results));
    }
  });
});

注意:你需要从回调URL中提取oauthVerifier参数,这通常是通过服务器端处理重定向请求时完成的。确保你的服务器能够正确地解析这些参数并将其传递给正确的逻辑处理部分。

回到顶部