当前位置:网站首页>微信小程序 30 自定义模板和获取用户登录凭证
微信小程序 30 自定义模板和获取用户登录凭证
2022-07-29 20:19:00 【牟泉禹[Dark Cat]】
30.1 自定义模板
WXML 是提供模板支持的。即 代码片段,就是你可以 把一段代码写到一个模板中。然后再不同的地方 就可以 调用!!
- 定义模板
<template name="msgItem">
<view>
<text>{
{index}}:{
{msg}}</text>
<text>Time:{
{time}}</text>
</view>
</template>
template 里面的 就是你要 封装的 代码片段。
- 调用/使用 模板
<template is = "msgItem" data="{
{...item}}"/>
es6运算符 三个点(…)
对象中的扩展运算符(…)用于取出参数对象中的所有可遍历属性,拷贝到当前对象之中。说白了就是 拆包。就是如果 你想要 把数据 传递到 模板里面去,那么就必须要 这样做。js 那里的属性 也必须 写到 这个 item 里面。

30.2 测试自定义模板
无论使用 模板的 wxml 还是 wxss 都需要 进行 import 导入!
模板
<!--自定义模板-->
<template name="myTmp">
<view>
<view class="title">这是我自定义的模板内容</view>
<view class="userInfo">
<view class="userName">用户名:{
{username}}</view>
<view class="age">年龄:{
{age}}</view>
</view>
</view>
</template>

.title {
font-size: 40rpx;
color: red;
}
使用 模板
<import src="../../template/myTemplate/myTemplate.wxml"></import>
<view class="otherContainer">
<view>测试使用模板</view>
<template is="myTmp" data="{
{...person}}" />
</view>

30.2 获取用户登录凭证
wx.login():调用接口获取登录凭证。
AppSecret(小程序密钥):de2aaa64fd066cae9e954784b6f4766f


我们拿到这个 code 之后,用 wx.request() 携带 code 向 开发者服务器发送请求。
- 用 node.js 去自己写一个 请求接口

handleGetOpenId(){
wx.login({
success: async (res) => {
console.log(res);
let code = res.code;
let ret = await request("getOpenId", {
code});
console.log(ret);
},
})
},

接口:GET https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
- 下载安装 Fly 库
它是一个 基于 Promise 的请求库,相较于 axios 有更加强大的功能 和 灵活性,并且 兼容多个环境。比如我们的 小程序 和 node,它就可以 同时 支持!而 axios 不可以。
npm install flyio

导入 Flyio 库,并且 创建 一个 对象 fly
const Fly = require('flyio/src/node');
const fly = new Fly;
使用 fly 进行 异步的 get 请求 并且 拿到 json 数据
// 注册获取用户唯一标识的接口
app.use('/getOpenId', async (req, res, next) => {
let code = req.query.code; // 查询字符串的形式携带 code
let appId = 'wxff8c196698bf9308';
let appSecret = 'de2aaa64fd066cae9e954784b6f4766f';
// 发请求给 微信接口服务器 获取 openId
let url = `https://api.weixin.qq.com/sns/jscode2session?appid=${
appId}&secret=${
appSecret}&js_code=${
code}&grant_type=authorization_code`
let result = await fly.get(url);
console.log(result);
res.send('测试数据');
});
这样我们 就成功 拿到了 openid 和 session_key了。

- 自定义登录态
自定义登录态 其实 就是拿 用户的基本信息 和 openidsession_key 进行一个关联。(封装到 一个 js 对象 里面就完事了。)

let user = {
username: 'MQy',
age: 20,
session_key: data.session_key,
openid: data.openid
}
这个 openid 是 用户登录后的 唯一标识,所以很重要!我们可通过它 来 确定 一个用户。所以 肯定 要 给 自定义登录态 加密的。
使用 jsonwebtoken 库 对 自定义登录态 加密
npm install json
const jwt = require('jsonwebtoken');
加密编码:jwt.sign(user, 'MuQuanyu');
解密解码:jwt.verify(user, 'MuQuanyu');
// 注册获取用户唯一标识的接口
app.use('/getOpenId', async (req, res, next) => {
let code = req.query.code; // 查询字符串的形式携带 code
let appId = 'wxff8c196698bf9308';
let appSecret = 'de2aaa64fd066cae9e954784b6f4766f';
// 发请求给 微信接口服务器 获取 openId
let url = `https://api.weixin.qq.com/sns/jscode2session?appid=${
appId}&secret=${
appSecret}&js_code=${
code}&grant_type=authorization_code`
let result = await fly.get(url);
let data = JSON.parse(result.data);
let user = {
username: 'MQy',
age: 20,
session_key: data.session_key,
openid: data.openid
}
let token = jwt.sign(user, 'MuQuanyu');
res.send(token);
});
app.use('/parseToken', (req, res, next) => {
let token = req.query.token; // 查询字符串的形式携带 token
let ret = jwt.verify(user, 'MuQuanyu');
res.send(ret);
});
handleGetOpenId(){
wx.login({
success: async (res) => {
console.log(res);
let code = res.code;
let token = await request("getOpenId", {
code});
console.log(token);
this.setData({
token
})
},
})
},
async handleParseToken() {
let user = await request("parseToken", {
token: this.data.token});
console.log(user);
},

边栏推荐
- 指定宽度截取字符串
- Kotlin - Coroutine Scope CoroutineScope, Coroutine Builder CoroutineBuilder, Coroutine Scope Function CoroutineScope Functiom
- MySQL数据查询 - 简单查询
- json-c实现json和结构体之间的相互转换
- ACM study book introduction
- JSP Servlet JDBC MySQL CRUD 示例教程
- Summary of scratch learning related materials
- 模型推理模板
- C# WPF给综合实战项目加个帮助文档
- 万字总结:分布式系统的38个知识点
猜你喜欢
随机推荐
[GXYCTF2019]禁止套娃
Durable rules (persistent rules engine) learning notes
单壁碳纳米管-DNA复合物(SWCNT-DNA)|作用机理
Setinel 原理简介
七个易犯的 IT 管理错误—以及如何避免
JMeter使用教程(一)
MSNs-SS-siRNA二氧化硅-二硫键-核酸RNA|HA-SS-siRNA,hyaluronic acid透明质酸修饰RNA(RNA修饰剂)
siRNA-S-S-PEG-LMWP|M-MSN-siRNA介孔二氧化硅修饰RNA(齐岳RNA功能化修饰)
Single-core browser and what is the difference between dual-core browser, which to use?
LeetCode--单链表--146.LRU缓存
RNA修饰质谱检测|dextran-siRNA 葡聚糖化学偶联DNA/RNA|siRNA-PLGA聚乳酸-羟基乙酸共聚物修饰核糖核酸
mysql get field comments and get table fields
mysql 获取字段注释 和获取表字段
JMeter使用教程(二)
进程间六种通信方式
A dish hold up valuations billions of mt. Pickled fish, can move beyond the edge food safety?
es6语法使用默认参数和解构
一线技术人应该关注的四种思维能力
根据昵称首字母生成头像
Agile Organization | The path for enterprises to overcome the impact of the digital wave









