登录

微信小程序注册与登录-编程知识网
常规的登录流程时只存在客户端与开发者服务器两个端,而微信登录则具有微信接口服务介入;
如上图所示关于微信登录流程:
1、通过wx.getUserProfile获取用户数据;
2、点击授权按钮调用wx.login获取用户的code,这里的code临时的code
3、从客户端发送请求到开发者服务器,传递userInfo与code,此处使用的是nodejs搭建的服务
4、在开放者服务器需要去调用微信接口(·https://api.weixin.qq.com/sns/jscode2session?appid=${appid}&secret=${secretid}&js_code=${code}&grant_type=authorization_code·)来校验登录凭证,此处的appidsecretid就是自己的小程序appidsercetIdcode也就是前端传递的code;
5、如果登录凭证校验成功后会返回session_key及用户的openid,此处的openid是微信用户的唯一性id;
6、这里就可以查询数据库是否存在openid这条数据,如果不存在则将userinfo与openid存储到数据库中,如果存在则更新数据即可
7、我们将返回的openid加密后放在token中返回给前端;
8、前端就可以将这个token存储起来,在需要token进行登录验证的接口携带token,来进行token验证。

 login: async (req, res) => {const { code } = req.query;const { userInfo } = req.body;const appid = "xxxxx";const secretid = "xxxxxx";const { data } = await axios.get(`https://api.weixin.qq.com/sns/jscode2session?appid=${appid}&secret=${secretid}&js_code=${code}&grant_type=authorization_code`);const token = jwt.sign(data, jwtSecretKey);if (data) {const selectSql = `select * from user where openId = ?`;db.dbConnect(selectSql, data.openid, (err, result) => {if (err) res.send(err);if (result.length === 0) {const insertSql = `insert into user set ?`;db.dbConnect(insertSql,{openId: data.openid,nickName: userInfo.nickName,avatarUrl: userInfo.avatarUrl,},(err, data) => {if (err) res.send(err);if (data.affectedRows !== 1) return res.send("授权失败,请重试");res.send({token: "Bearer " + token,status: 200,message: "授权成功",});});} else {const sql = `update user set ? where openId = ?`;db.dbConnect(sql,[{openId: data.openid,nickName: userInfo.nickName,avatarUrl: userInfo.avatarUrl,},data.openid,],(err, result) => {if (err) return res.cc(err);res.send({token: "Bearer " + token,status: 200,messages: "授权成功123123",});});}});}},

注册

注册实际上是登录时将用户数据存储在数据库的一个操作。

获取用户数据wx.getUserProfile

调用方式: 页面产生点击事件才可以调用。

 wx.getUserProfile({desc: '用于完善会员资料', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写success: (res) => {console.log(res)}})

当基础库小于等于2.27.0版本时获取用户信息会让用户进行允许操作,并且能获取到用户头像及微信名。
微信小程序注册与登录-编程知识网
微信小程序注册与登录-编程知识网
当基础库大于2.27.0版本时,不会弹出允许弹窗,但是返回的用户数据中头像为微信默认灰色头像,nickName返回为微信用户。
微信小程序注册与登录-编程知识网
微信小程序注册与登录-编程知识网

头像昵称填写功能

微信推荐单独开一个页面让用户能设置头像及昵称,提供的两个button会默认返回微信头像和微信昵称;
使用方法如下:
1、设置头像
open-type=“chooseAvatar”

    <buttonclass="avatar-wrapper"open-type="chooseAvatar"bind:chooseavatar="onChooseAvatar"><image class="avatar" src="{{ avatarUrl }}"></image></button>

2、设置昵称
type为nickname

<input type="nickname" class="weui-input" value="nickName" onchange="setNickName" placeholder="请输入昵称" />

微信小程序注册与登录-编程知识网