使用场景

小程序启动或者登录成功后执行某操作的场景

接口配置

在conf.js中配置loginCgi为登录接口

module.exports = {
    "loginCgi":"https://xxx.wii.qq.com/wxapp_api/user/login"
}

引入模块

var auth = require('./utils/auth.js');

auth.login()

小程序初始化时调用

//app.js
 App({
     onLaunch: function() {
         var auth = require('./utils/auth.js');
         auth.login();
     },
     ...
 });

auth.login().then(callback)

当执行某操作需要确保用户登录的情况下使用,或者登录成功后执行某回调函数。如果执行多个回调函数,可链式调用多次then方法,若保持回调函数按照链式的顺序执行,callback应该是Promise的实例

//index.js
 var auth = require('../../utils/auth');
 Page({
     onLoad:function(){
         //执行一次回调函数
         auth.login().then(function(){
             console.log('callback success')
         });
         //执行多次回调函数
         auth.login().then(callback1).then(callback2);
     },
     callback1:function(){
         return new Promise(function(resolve,reject){
             console.log('callback1');
             resolove();
         });
     },
     callback2:function(){
         return new Promise(function(resolve,reject){
             console.log('callback2');
             resolve();
         });
     }
     ...
 });

登录模块的逻辑图

小程序登录逻辑

时序图如下,简单概括为:用户在客户端调用wx.login()成功之后会拿到一个code,通过code请求第三方服务器的登录接口。第三方服务器在收到请求之后,使用get方式code、appid、appsecret去请求微信服务器上的https://api.weixin.qq.com/sns/jscode2session接口,成功后拿到session_key 和 openid,其中openid是用户的唯一标识,session_key 是会话密钥。其中session_key作为对用户数据进行加密签名的密钥,不应该在网络中传输。此时,第三方服务器会通过加密openid和session_key生成一个3rd_session,并且以3rd_session为key,session_key+openid为value写入第三方服务器的session存储,并设置一定的缓存时间。最后,将3rd_session通过登录接口返回给客户端。客户端拿到3rd_session后会缓存到本地,当请求api接口时携带3rd_session,第三方服务器去session存储中查找该3rd_session,如果找到了则说明3rd_session为过期,找不到则说明3rd_session已过期,需要重新登录。

results matching ""

    No results matching ""