微信小程序中登录流程示例

wx.login(Object object)

调用接口获取登录凭证(code)。通过凭证进而换取用户登录态信息,包括用户的唯一标识(openid)及本次登录的会话密钥(session_key)等。用户数据的加解密通讯需要依赖会话密钥完成。更多使用方法详见 小程序登录

属性类型默认值必填说明最低版本
timeoutnumber 超时时间,单位ms1.9.90
successfunction 接口调用成功的回调函数 
failfunction 接口调用失败的回调函数 
completefunction 接口调用结束的回调函数(调用成功、失败都会执行)

示例

<!--pages/01login/01login.wxml-->
<button bindtap="_login">登录</button>

// pages/01login/01login.js
Page({
  // 同步方法 Promise
  loginSync(){
    return new Promise((resolve,reject)=>{
      wx.login({
        success:resolve,
        fail:reject
      })
    });
  },
  requestSync(url,data={}){
    return new Promise((resolve,reject)=>{
      wx.request({
        url,
        data,
        success:resolve,
        fail:reject
      })
    })
  },
  async _login(){
    // 1 获取临时的code wx.login 异步方法
    // wx.login({
    //   success(res){
    //     console.log(res)//res.code
    //   }
    // })

    try{
      // 1开发者需要在开发者服务器后台调用 auth.code2Session,使用 code 换取 openid 和 session_key 等信息
      let loginRes = await this.loginSync();
      console.log(loginRes,'ok');
      let code = loginRes.code;
      // 2发起请求
      let requestRes = await this.requestSync('http://127.0.0.1:3000/login',{code});
      // console.log(requestRes.data.openid)
      // 3存储用户身份标识 是唯一的
      wx.setStorageSync('openid', requestRes.data.openid);
    }catch(err){
      console.log(err,'err')
    }
  }
})

判断用户是否登录

// pages/02order/02order.js
Page({
  onLoad(){
    // 可以将验证用户是否登录,可以将其写在app.js中 验证一次即可
    wx.checkSession({
      success () {
        //session_key 未过期,并且在本生命周期一直有效
        console.log("登录状态有效")
      },
      fail (err) {
        // session_key 已经失效,需要重新执行登录流程
        console.log(err,"没有登录...")
        wx.showToast({
          title: '未登录',
          success(){
            wx.navigateTo({
              url: '/pages/01login/01login',
            })
          }
        })
      }
    })
    
  }
})

 后端api接口

const express = require('express')

//got模块,相当于前台的ajax功能
const got = require('got')
//创建一个应用
const app = express()

//匹配GET请求路径设置回调函数
app.get('/login',(req,res)=>{

    //  req.query.code

    const js_code = req.query.code //这是小程序进行登录临时的code  5分钟
	//console.log(js_code,33333)
    //3 . auth.code2session接口,进行解密code。获取此小程序用户的id
        //https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
    const appid = '个人appid'
    const secret = '个人小程序密钥' //此小程序appid的密钥  从小程序后台 。
    const code2sessionUrl = `https://api.weixin.qq.com/sns/jscode2session?appid=${appid}&secret=${secret}&js_code=${js_code}&grant_type=authorization_code`;

    //res.send( code2sessionUrl )
    ;(async () => {
        try {
            const response = await got( code2sessionUrl );//发送got请求
            //console.log(typeof response.body,response.body);
            let result = JSON.parse( response.body )
            res.send({
                openid:result.openid + 'woshiyigesuozi',
				msg:"请求成功"
            })// openid  session_key(解密敏感数据)
        } catch (error) {
            //console.log(error.response.body);
            //=> 'Internal server error ...'
            res.send(error.response.body)
        }
    })()
})


app.get('/checklogin',(req,res)=>{
    //req.query.openid + 'woshiyigesuozi'
})
//监听端口
app.listen(3000,()=>{
	console.log('port',3000)
})

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JackieDYH

谢谢您嘞!我会继续加油地

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值