提供微商城·微分销·小程序开店需求
5分钟开通你的微信商城店铺!2018-09-06 作者:秩名
由于微信小程序api的升级,微信小程序的登录授权也与之前不一样,那么新版小程序登录授权怎么做?以下为大家介绍流程:
由于微信小程序的改版导致直接弹出授权的登录方式将逐渐不再支持,受影响的有 wx.getUserInfo 接口,以及 wx.authorize 接口传入 scope=”scope.userInfo” 的情况。所以需要重新设计一套合适的登录授权流程。整体流程如下图:
由于APP中有些页面默认需要登录的,如[个人中心]页面,需要登录获取到用户信息,才能继续操作。这样的页面就需要在每次进入页面(onShow)时判断是否授权了。
profile页面
onShow () { login(() => { do something... }) }
关于登录授权相关的逻辑都可以封装在handleLogin.js中
handleLogin.js
// 开始login function login (callback) { wx.showLoading() wx.login({ success (res) { if (res.code) { // 登录成功,获取用户信息 getUserInfo(res.code, callback) } else { // 否则弹窗显示,showToast需要封装 showToast() } }, fail () { showToast() } }) } // 获取用户信息 function getUserInfo (code, callback) { wx.getUserInfo({ // 获取成功,全局存储用户信息,开发者服务器登录 success (res) { // 全局存储用户信息 store.commit('storeUpdateWxUser', res.userInfo) postLogin(code, res.iv, res.encryptedData, callback) }, // 获取失败,弹窗提示一键登录 fail () { wx.hideLoading() // 获取用户信息失败,清楚全局存储的登录状态,弹窗提示一键登录 // 使用token管理登录态的,清楚存储全局的token // 使用cookie管理登录态的,可以清楚全局登录状态管理的变量 store.commit('storeUpdateToken', '') // 获取不到用户信息,说明用户没有授权或者取消授权。弹窗提示一键登录,后续会讲 showLoginModal() } }) } // 开发者服务端登录 function postLogin (code, iv, encryptedData, callback) { let params = { code: code, iv: iv, encryptedData: encryptedData } request(apiUrl.postLogin, params, 'post').then((res) => { if (res.code == 1) { wx.hideLoading() // 登录成功, // 使用token管理登录态的,存储全局token,用于当做登录态判断, // 使用cookie管理登录态的,可以存任意变量当做已登录状态 store.commit('storeUpdateToken', res.data.token) callback && callback() } else { showToast() } }).catch((err) => { showToast() }) } // 显示toast弹窗 function showToast (content = '登录失败,请稍后再试') { wx.showToast({ title: content, icon: 'none' }) }
到此为止,登录就算完成了。不管使用token还是cookie都可以,都能有正常的登录态了,可以执行后续操作。
整个流程是 wx.login => wx.getUserInfo => 开发者服务器登录postLogin。
某些页面默认不需要登录,但某些用户操作事件是需要登录状态的,所以一者可以判断全局存储的登录状态管理的变量,如果为false,那么直接可以弹窗提示需要一键登录。二者如果全局状态为true,则调用接口看接口返回的code是否是未登录状态(此情况一般来说是登录态过期),未登录的话也弹窗提示需要一键登录。
某页面(需登录的用户操作)
getPlayer () { // 判断全局是否有登录状态,如果没有直接弹窗提示一键登录 isLogin(() => { let params = { token: this.token } request(apiUrl.getPlayer, params).then((res) => { // TODO: 删除打印 if (res.code === 1) { store.commit('storeUpdateUser', res.data.player_info) } else { // 获取失败了,如果是code是未登录,则去登录,然后执行回调函数this.getPlayer // 如果code不是未登录,直接弹窗报错误信息 handleError(res, this.getPlayer) } }).catch((err) => { handleError(err) }) }) }
handleLogin.js
// 判断是否登录 function isLogin (callback) { let token = store.state.token if (token) { // 如果有全局存储的登录态,暂时认为他是登录状态 callback && callback() } else { // 如果没有登录态,弹窗提示一键登录 showLoginModal() } } // 接口调用失败处理, function handleError (res, callback) { // 规定-3041和-3042分别代表未登录和登录态失效 if (res.code == -3041 || res.code == -3042) { // 弹窗提示一键登录 showLoginModal() } else if (res.msg) { // 弹窗显示错误信息 showToast(res.msg) } }
到此为止,需要登录的用户操作就可以处理了。如果全局登录状态变量为true,先去调用接口,根据返回的信息是否是未登录再处理。
由于微信小程序授权的接口wx.getUserInfo和wx.authorize中scope 为 “scope.userInfo” ,新版中调用这两个API是不会主动触发弹出授权窗口的。需要使用 <button open-type="getUserInfo"></button> 方法。
上面代码中多处出现的showLoginModal是用于显示一键登录的。如下:
handleLogin.js
// 显示一键登录的弹窗 function showLoginModal () { wx.showModal({ title: '提示', content: '你还未登录,登录后可获得完整体验 ', confirmText: '一键登录', success (res) { // 点击一键登录,去授权页面 if (res.confirm) { wx.navigateTo({ url: '授权登录页面地址', }) } } }) }
关于授权登录,我们做了一个专门的页面处理,此处的button为<button type="primary" v-if="canIUse" open-type="getUserInfo" @getuserinfo="getUserInfo">微信登录</button>。如下:
getUserInfo (e) { if (e.target.userInfo) { // 点击Button弹窗授权,如果授权了,执行login // 因为Login流程中有wx.getUserInfo,此时就可以获取到了 login(() => { // 登录成功后,返回 wx.navigateBack() }) } }
到此为止,整个授权和登录流程就算走完了。可以回过头梳理一下最开始的流程图,应该就能理清整个逻辑了。
推荐文章
是不是很多微信用户在使用微信小程序时会出现这样的问题,比如,突然中断的情况,其实这就是微信小程序闪退。微信小程...
日前,百度陆续开放了多个智能小程序流量入口,具体包括以下三类: 第一类是中心化入口。 用户除了在“我的“菜单可以...
微信应用的一个很大的优势就在于使用过程中是不需要进行注册和显式登录的,大部分问题基本上可以一键解决。但是在授权...
见到 wx.request 的第一眼,就让我想起了 $.ajax 这东西,使用起来确实有很多不方便,不能忍,幸好小程序是支持ES6语法的,所...
超市收银系统百科 超市收银系统是零售业中用于处理销售交易的关键技术,它不仅提高了结账效率,还增强了顾客的购物体...
酒吧收银系统百科 1. 酒吧收银系统概述 酒吧收银系统是专为酒吧、夜店等娱乐场所设计的一套集成化管理软件,它能够实现...
生鲜超市收银系统十大品牌有哪些呢?下面小编就为大家来讲解一下各收银系统的特...
收银软件是门店运营中非常必备的实用工具之一,收银软件的性能决定着一家门店管理的效率,那么目前收银软件市场来看,...
目前,一套易于使用和适用的收银系统是一个店铺基本的标准,收银系统可以帮助店铺提高商店管理和工作效率,那市面上比...
微信会员管理小程序怎么做 微信会员管理小程序能够帮助企业更好地管理和运营会员,提升用户粘性和忠诚度。以下是创建...