uniapph5授权成功后返回上一页_微信小程序:授权登录

一:原因

看到标题也许也许有的人会奇怪,我们不是已经在页面中显示用户的头像和昵称了吗,而且open-data组件也可以显示用户的其他信息。

其实,仅仅是这样只是让用户看到了他自己的头像和昵称不足以我们让对用户信息进行管理。我们需要通过授权将得到的用户信息上传至云数据库,才能方便我们管理用户信息。

2c4a0188c2b7ccce5f966036b61f0987.gif

再来回顾一下我们编写的“个人”页面:

9218c2c6f194bf6be740f1a2bd73e105.png

习惯了首页的简洁,再看个人页面文件夹混乱的文件都快看不下去了,现在你也许体会到建立images文件夹的意义。把这些图片移动到images文件夹是个不错的选择哦(我偷个懒就懒得改了吧hhh)。


二:编译模式

在编译器上方编译和预览按钮旁边有个选择编译模式:

4034c20dff738400d1826471cfbe3702.png

如果你没有对编译模式进行更改的话。

每次重启小程序出现的第一个页面就是在app.json的pages数组的第一个页面,也就是程序的首页。

1a2ae282a9c070936bae50dcf0a88666.png

但是,我们的小程序的首页很显然是

"pages/index/index"

所以我们需要更改pages顺序

9070df28549496e88e9c4451c82f718b.png

这时候小程序每次重启进入的页面都是首页。

问题又来啦,我们现在要开发个人页面,不可能每次重启后都通过底部的tabbar栏或者其他方式切换吧。

解决方法:切换不同的编译模式可以让我们设置重启后的启动页面,也就是重启小程序后显示的第一个页面。

46aa981c307fbd12ba042476a725fdac.png

点击普通编译右边那个小三角形符号,选择添加编译模式:

模式名自取,启用页面指在该编译模式下小程序启动出现的第一个页面。

9fd13318184663fd6ea8f1d1c2c603e7.png

完成后可通过再次点击三角形图标添加其他编译模式或者切换编译模式,也可以点击我们自定义的编译模式(如图中的个人)后的图标修改或删除该编译模式。

b7058e12c3afb9cdef761be7e4a86358.png

这样比改pages方便多了,可随便切换。

三:授权

小程序中通过将button组件的open-type属性的属性值设置为getUserInfo调动授权面板。

但是,仅仅是这样的写是没有意义的,由于不占用空间,所以在页面中看不到。

乱写的话,用户可能也不知道是什么意思。我们可以像这样写入请先授权这四个字提示用户。

请先授权

f98e520bb86ea255a5b3116c946d8640.png

如上图,多了一个组件,页面重新排列。

头像上多了button组件,所以相对button而不是最上面的图片向上移动了我们原先设置的80rpx。点击button按钮,弹出了我们需要的授权框。

40586b9a6d76c4a1fded3e3030aed68a.png

那么,我怎么在小程序端知道用户是点了“允许”还是“拒绝”按钮呢。这时候就要用到另一个属性了。

bindgetuserinfo:返回用户的选择信息

小提示:这个属性的字母都是小写的哦~

55b9727300cb2b85a1e538c5735d423b.png

bindgetuserinfo的属性值是一个方法名,该方法在页面js文件中与data,onLoad等平级。该方法可通过一个参数接受系统返回给我们的用户选择信息,参数名自取。我给参数取的名字是e,其实随便你怎么取,符合js命名规范即可。

2d475fce1032659ecf04404b8671aa81.png

准备好了,我们再次点击授权button看看会返回什么信息给我们。

①情况一:第一次弹窗授权窗口的时候点了允许

这时候授权窗口不会再弹出了了,但是控制台打印出了我们想要的信息。

a73641b44d4af69c3bd437fa0dd22788.png

点开查看详细信息

显然信息是作为js对象的形式返回的。在type的detail的userInfo有当前用户详细信息。

32d1d82f9bb4fcf19c255e7fa8c5ba4d.png

除此之外,在detail的rawData也有信息

ed29f93afab19e93bf28822917710348.png

②情况二:第一次弹窗授权窗口的时候点了拒绝

模拟器重新弹窗授权窗口,点击拒绝,在type的detail的userInfo出现了下列信息。

5113248cba226905b90443e295cec69f.png

这时候已经没有rawData和userInfo了,只有errMsg

③情况三:第一次点了接受,但是想看拒绝返回的信息是什么

点了接受,后面再点击button就不会再弹出授权窗口了,所以我们需要点击编译器上方的清缓存按钮,选择清除授权数据选项,这样就清除了授权,也就是回到了还没点允许或者拒绝的阶段。

d8c5acdced3fd572e1d23991ef4ea968.png

8b47f41b4a085bd3b7ee7fc398742d50.png

三:条件渲染

button和下面的open-data挤在一起不仅很难看,而且容易误导用户。那么能不能控制页面两者选其中一个显示,需要显示哪个就显示哪个呢?

条件渲染:wx:if=""

通过条件渲染选择需要展示的界面

c00d70583e64e86735d1d2dd815caa97.png

Boolean类型的默认值为false,当然,你也可以写canIUse:false。

小提示:B是大写的不能写boolean哦

bd05abcd72579d17edf8c922d8379f29.png

d189aeec6a853a6f18763f99783d7ae6.png

如果是true

865765a7f4d21c46761e1dd9d3bc7a64.png

小提示:我们需要在授权前有这么一个授权按钮,所以canIUse的默认值应该设置为true而不是false。这个时候,逻辑上就出现问题了,canIUse为true在逻辑上理解应该是授权了的,而我们却让为true的时候不显示头像昵称,让为false的时候选择显示头像昵称。

自己思考解决方法哦~我懒得写哈哈哈

a0c63dc2c086b792fb28023f60c82b06.png

我在组件中不止写了wx:if,在open-data组件外加了一个view并写上了wx:else。wx:if绑定的变量的值是true,就显示wx:if绑定的组件,不显示wx:else绑定的组件。如果wx:if绑定的变量的值是false,就显示wx:else绑定的组件,不显示wx:if绑定的组件。

如果有三个以上的组件且有更多的选择区域:

就需要wx:elif了

在语法绑定{{}}中不仅可以直接写变量名,还接受对变量的值进行算数比较,数值的比较的结果boolean类型也就是true或者false,这就满足了我们的条件渲染。

示例如下:在data中定义money变量,随便给一个数值

小提示:>=是大于等于的意思

<view wx:if="{{money<998}}"> 普通栏目<view wx:else>别看了,你学不会的 view>

中间有多个选项就用多个wx:elif:

<view wx:if="{{money<998}}"> 普通栏目 view>

<view wx:elif="{{money>9999}}"> 超级vip栏目 view>

<view wx:elif="{{money>=998}}"> vip栏目view>

<view wx:else> 别看了,你学不会的 view>

通过js的条件语句也就是if(值){代码1}else{代码2}设置data中canIUse的值。

而在js的getUserInfo(也就是button的bindgetuserinfo属性的值)方法得到的参数中detail的rawData在允许授权时存在,拒绝授权时不存在,可以作为判断的调节。

补充:

允许,也就是rwaData对象中的数据不为空,在if()中自动转换成了true

拒绝,也就是rawData的值为Undefined,在if()中自动转换成了false

代码如下:

1324ffbccdb55f826e9066c085f7d631.png

这样,在点击允许或者拒绝的时候data中canIUse值的切换就完成了。

问题又来了,getUserInfo方法只有我们点击button时才会触发。而小程序重启后canIUse又恢复了默认值true,这时候授权的button显示在页面上,而opne-data两个组件也就是我们的头像昵称没有显示。最尴尬的是,因为我们原先点了允许按钮,现在再点button不会再弹出授权窗口了。

所以,我们需要在小程序重启时重新判断是否授权。

wx.getSetting:获取授权信息

文档地址如下:

https://developers.weixin.qq.com/miniprogram/dev/api/open-api/setting/wx.getSetting.html、

success方法,在wx.getSetting调用成功时执行,可设置一个参数用于接受返回的信息。

5220a28f785fbcad525c1527ac2ed101.png

419a24c2770f7a41daa869532f40f71f.png

没有授权时authSetting的scope.userInfo的值是false,授权成功时为true。这样我们再次通过if设置canIUse的值。

但是,由于onLoad函数的特殊性,我们后期肯定还要在其中写入代码,到时候代码太多了看起来就特别费劲。

解决方法:在Page({})中定义一个和onLoad平级的方法装入判断授权信息的代码,再在onLoad中调用该方法即可。

在onLoad中通过this.方法名()的格式调用。

我这里叫getInfo其实也是名字和内容不符的那种命名,我就是随便写写,建议你们合理命名哦。

26e3498325aeb4b3fc51859f3c972f2e.png

根据整体与分割思想,在外层加一个view组件,将这两个组件和两个open-data组件分隔。从对称性和页面可读性的角度考虑增加一句请先点击滑稽授权哦~。

fa3438c46a4503e98eb5471b465eb6e7.png

编写样式:

坑来了:小程序默认给button的默认样式中有

padding-left: 14px;

padding-right: 14px;

显然会影响图片的位置,所以我将padding设为0

5227b1651ed19fee84dacde4b83f1317.png

d4a554de36021004e161fb3165be2026.png

小提示:我的滑稽图本来就有多余的空白,所以没有占满整个圆形。

18ae9e3bc443f79517c10e70093e9e11.png

可以用一些炫酷的动态图哦~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值