马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
目录
前言:
准备 :
授权登录:
前端实现:
标签部门:
js部门:实现getUserInfo方法
getUserInfo方法全代码
后端实现:
获取头像:
前言:
在做微信小程序时,不可制止需要调取用户的身份,那么就要用到微信官方的授权码去换用户信息。
焦点思路:
用户点击登录——同意微信授权——通过uni.getUserProfile获得用户的code——将code传递给后端,后端携带code请求微信官方接口获得用户信息返回
准备 :
在这之前需要准备的:起首在微信小程序助手中获得注册小程序时绑定的
授权登录:
前端实现:
标签部门:
我们准备一个button用来让用户点击拉起微信授权登录
- <view>
- <button @click="getUserInfo">微信登录</button>
- </view>
复制代码 js部门:实现getUserInfo方法
内里计划到的API:
uni.showLoading:展示加载框
- uni.showLoading({
- // 展示加载框
- title: '加载中'
- })
复制代码 uni.getUserProfile():获取用户信息
- getUserInfo(e) {
- var that = this
- uni.showLoading({
- // 展示加载框
- title: '加载中'
- })
- uni.getUserProfile({
- //获取到用户信息
- desc: '登录后可同步数据', // 必须要有一个desc字段
- success: async (obj) => {
- // 调用uni.login接口
- // 调用uni.login接口
- // 调用uni.login接口
- // 调用uni.login接口
- },
- fail: () => {
- uni.showToast({
- title: '授权已取消',
- icon: 'error',
- mask: true
- })
- },
- complete: () => {
- // 隐藏loading
- uni.hideLoading()
- }
- })
- }
复制代码 uni.login():用户进行登录获取code
- uni.login({
- provider: 'weixin',
- success: async (res) => {
- console.log(res)
- // 打印res信息,里面只有{errMsg: "login:ok",code: "你的code"}
- that.code = res.code
- // 请求登录,调用后端接口,我这里是自己封装了后端接口wxLogin,将code传递过去
- const data = await wxLogin({ code: that.code })
- if (data.data.code == 200) {
- uni.showToast({
- title: '授权登录成功!',
- mask: true,
- icon: 'success'
- })
- // data.data为后端返回的用户信息
- this.login(data.data)
- }
- }
- })
复制代码 getUserInfo方法全代码
- //微信授权登录
- getUserInfo(e) {
- var that = this
- uni.showLoading({
- // 展示加载框
- title: '加载中'
- })
- uni.getUserProfile({
- //获取到用户信息
- desc: '登录后可同步数据',
- success: async (obj) => {
- // 调用 action ,请求登录接口
- uni.hideLoading()
- uni.login({
- provider: 'weixin',
- success: async (res) => {
- console.log(res)
- that.code = res.code
- // 请求登录
- const data = await wxLogin({ code: that.code })
- if (data.data.code == 200) {
- uni.showToast({
- title: '授权登录成功!',
- mask: true,
- icon: 'success'
- })
- this.login(data.data)
- }
- }
- })
- },
- fail: () => {
- uni.showToast({
- title: '授权已取消',
- icon: 'error',
- mask: true
- })
- },
- complete: () => {
- // 隐藏loading
- uni.hideLoading()
- }
- })
- },
- login(data) {
- uni.setStorageSync('huoli-token', data.data.token)
- uni.setStorageSync('huoli-id', data.data.id)
- }
复制代码 后端实现:
后端接收到前端传来的code,调用微信官方接口请求数据
这里在前端采用uni.request进行代码演示
- uni.request({
- url: 'https://api.weixin.qq.com/sns/jscode2session',// 请求微信服务器
- method:'GET',
- data: {
- appid: '你的小程序的APPID' //你的小程序的APPID
- secret: '你的小程序秘钥secret', //你的小程序秘钥secret
- js_code: code, //uni.login 登录成功后的code
- grant_type:'authorization_code' // 固定写死的,不用变
- ,
- success: (res) => {
- // console.log('获取信息',res); // 换取成功后 暂存这些数据 留作后续操作
- this.openid=res.data.openid //openid 用户唯一标识
- this.session_key=res.data.session_key //session_key 会话密钥
- // 把这些信息存起来即可
- })
- }
- });
复制代码 获取头像:
- <button open-type="chooseAvatar" @chooseavatar="onChooseAvatar">授权头像</button>
- onChooseAvatar(e) {
- this.showing = true
- let that = this
- that.imgurl = e.detail.avatarUrl
- }
复制代码 这步就是通过 chooseAvatar 方法获取到用户头像信息,同时也可以选取相册照片当头像,e.detail.avatarUrl就是微信头像的临时地址,通过uni.uploadFile方法储存到服务器上
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |