回顾下之前的内容,我们能够设计小程序页面,能够实现用户与数据库之间的交互,也已经使用了云开发中的云存储、数据库、云函数,能够从前到后实现简单小程序的开发了。不过还有一块需要补充的,就是用户登录、多账号管理,我们开发的小程序并非面向自己使用,要面向更多用户使用。
1. 微信用户授权
前端页面,基本上都是小程序自带的代码,会判断用户是否登录的状态,如果已经登录则显示用户头像等信息,如果还没有登录提示登录。
为了更方便的展示登录的功能,我们在页面下方直接添加一个“点击登录”的按钮,用户点击后会跳转到index.js代码来调用wx.getUserProfile触发登录弹框。
<!-- miniprogram/user/index.wxml -->
<view class="container">
<view class="userinfo">
<block wx:if="{{canIUseOpenData}}">
<view class="userinfo-avatar" bindtap="bindViewTap">
<open-data type="userAvatarUrl"></open-data>
</view>
<open-data type="userNickName"></open-data>
</block>
<block wx:elif="{{!hasUserInfo}}">
<button wx:if="{{canIUseGetUserProfile}}" bindtap="getUserProfile"> 获取头像昵称 </button>
<button wx:elif="{{canIUse}}" open-type="getUserInfo" bindgetuserinfo="getUserInfo"> 获取头像昵称 </button>
<view wx:else> 请使用1.4.4及以上版本基础库 </view>
</block>
<block wx:else>
<image bindtap="bindViewTap" class="userinfo-avatar" src="{{userInfo.avatarUrl}}" mode="cover"></image>
<text class="userinfo-nickname">{{userInfo.nickName}}</text>
</block>
</view>
<view class="usermotto">
<text class="user-motto">{{motto}}</text>
</view>
<view>
<text class="user-motto" bindtap="userLogin">点击登录</text>
</view>
</view>
<!-- miniprogram/user/index.js -->
userLogin: function() {
wx.getUserProfile({
desc: '登录授权',
})
.then(res=>{
console.log("允许登录",res.userInfo);
this.setData({
nickName: res.userInfo.nickName,
avatarUrl: res.userInfo.avatarUrl
});
wx.setStorageSync('userInfo', res.userInfo)
})
.catch(err=>{
console.log("拒绝登录",err);
});
},
2. 多账号测试
微信用户登录后状态会一直保存,不能再清除,所以初次登录的情况对于每个用户只有一次,想进行测试还比较麻烦。之前我是拿家人的微信登录测试,但每次测试前都心惊胆战,担心这次不成功又要更换手机了。
后来发现可以模拟多个用户进行测试,点击小程序开发工具的“工具”,找到“多账号测试”,就能模拟多个用户进行测试了。
除了用户登录的测试,我们还可以在“小程序课程”页面使用其他测试账号来新增课程信息,然后在云开发-数据库控制台中查看数据详情,会发现新增数据和之前数据的“_openid”不同,“_openid”就是唯一标识微信用户的ID。
3. 小程序账号注册
一方面可以通过触发小程序登录功能使用微信用户的信息,另一方面还可以自己设计自己的账号体系,让用户通过昵称、邮箱、电话等信息来注册成为用户,这个可以使用前面的表单提交功能来实现。
不过对于常见小程序来说,基本上是两者结合的方式,自己维护一套账号体系,比如需要用户的昵称、头像、城市、邮箱、电话、个人标签、快递地址、积分等信息,通过小程序首次登录(相当于注册功能)能够获得用户授权的昵称、头像、城市、电话等信息,邮箱、个人标签、快递地址、积分等信息需要用户在登录后自行填写。这样既能够方便微信用户直接登录,又能拥有自己的账号体系,进行二次开发使用,比如会员积分分级等等。
4. 管理员权限
在“小程序课程”界面中,任何用户都能查看到课程列表,也能新增创建课程信息,但这并不符合自己的预期,任何用户都能查看到课程列表,不应该让其他用户创建课程信息,而对小程序来说用户并没有什么区别,这块还需要我们自己来实现。
通过上面一步我们能拥有自己的账号体系,即便保存的用户账号信息和小程序授权提供的信息相同,我们也应该在数据库中单独存储。有了这些授权的账号信息,我们可以标记哪些用户是超级管理员、有创建和编辑的权限,比如把你自己设置为超级管理员。
有了数据库信息,还可以根据用户积分信息设置不同的权限,根据用户是否付费设置不同的课程访问权限等等。在每个页面中检查用户的权限,另外在云函数或后端接口中也要检查用户的权限,避免用户绕过前端界面限制而直接访问后端接口导致越权访问。
5. 网站使用微信扫码登录
需要企业认证的微信开发者账号,用户可以在你的网站上扫描二维码来授权登录。当然登录后接口会返回登录状态码,在你的网站程序中自行保存登录状态、用户信息即可。个人身份的微信或小程序,还都无法实现以上功能,因此不做展开介绍,可参考文档:https://developers.weixin.qq.com/doc/oplatform/Website_App/WeChat_Login/Wechat_Login.html。
6. 作业
本次作业也同样是动手完成几个操作,提交结果截图和代码截图吧。
- 小程序用户登录弹框wxml和JS代码截图
- 小程序用户登录弹框界面截图
- 小程序测试账号添加数据到数据库后的数据库截图,需要显示不同的"_openid"