微信 access_token
发布于 7 年前 作者 lzy2014love 4685 次浏览 来自 问答

按照我的理解,一个appid对应一个access_token (可以刷新),但是我看的wechat-oauth库的markdown有个例子

自定义saveToken方法

TokenSchema.statics.setToken = function (openid, token, cb) {
  // 有则更新,无则添加
  var query = {openid: openid};
  var options = {upsert: true};
  this.update(query, token, options, function (err, result) {
    if (err) throw err;
    return cb(null);
  });
};

mongoose.model('Token', 'TokenSchema');

初始化:

var client = new OAuth(appid, secret, function (openid, callback) {
  // 传入一个根据openid获取对应的全局token的方法
  // 在getUser时会通过该方法来获取token
  Token.getToken(openid, callback);
}, function (openid, token, callback) {
  // 持久化时请注意,每个openid都对应一个唯一的token!
  Token.setToken(openid, token, callback);
});

为什么每个openid都对应一个唯一的token?求指点

6 回复

求教

来自酷炫的 CNodeMD

非常有帮助,谢谢!

微信分2个token:access_tokenrefresh_token,前者有效期好像只有2个小时,后者是一个月。用户拉取微信授权的时候微信服务器会返回这2个token,你拿到前一个去微信服务器auth是否有效,有效的话则登录成功,无效则告诉用户登录失败(可以选择让用户再次授权)。 前面拿到refresh_token的时候你需要存下来(因为它的有效期是一个月,access_token 存不存倒无所谓),当用户下次登录的时候你通过refresh_token 拿到access_token再走之前的auth流程就行。因为你不可能让用户每次都授权啊

看文档就明白了,此token非彼token。 文档地址:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842 微信网页开发->微信网页授权->关于网页授权access_token和普通access_token的区别

1、微信网页授权是通过OAuth2.0机制实现的,在用户授权给公众号后,公众号可以获取到一个网页授权特有的接口调用凭证(网页授权access_token),通过网页授权access_token可以进行授权后接口调用,如获取用户基本信息; 2、其他微信接口,需要通过基础支持中的“获取access_token”接口来获取到的普通access_token调用。

所以这里的token和openid是一对一的。

多谢,是我自己把这两个token当成同一个了

来自酷炫的 CNodeMD

回到顶部