用户组件用于制作应用中的基础用户登录/注册、用户管理以及用户权限设置功能。其本质是一个用户数据表,同时提供了以下主要功能性函数:
注意,电商组件必须搭配一个用户组件才能使用,即任何购物车/购买行为,必须来自一个已经登录后的用户。
用户表有以下默认字段:
用户组件提供以下多种用户注册/登录方式:
每一种注册/登录方式,都对应一种类型的登录凭证,所谓登录凭证,即用户登录时发送给后台,进行登录验证的信息。每种注册/登录方式的的登录凭证如下:
在用户表中,有一个“登录类型”字段,专门来标记每一条用户记录的登录类型,字段值为从0开始的数值,每种类型对应的字段类型数值如上表所示。
用户表中每一条用户记录信息,只能对应一种注册/登录方式,且不能在中途修改。
每种类型的注册/登录方式,可以同时收集用户的其他信息,比如,使用微信小程序登录的用户,可以进一步绑定手机号,此时,用户记录中除了有openid,还会有手机号的信息,但此时该用户依然需要使用openid作为登录凭证进行登录,手机号只是作为一个附属信息。
用户的注册即向用户表中添加一条数据。针对每种注册/登录类型,其主登录凭证对应的字段(比如,手机号注册时的手机号字段),不能有重复的值,否则会注册方法会返回“用户已注册”。
不同类型的注册/登录类型有不同的注册方法,其中,手机号和邮箱注册,需要使用用户表的以下方法:
除了用户类型,其他信息都为必填信息。用户类型是设置用户权限时需要的一个字段信息,具体使用方法请参见本文档”用户权限“部分。
微信小程序与微信公众号注册与手机/邮箱注册不同,都是系统自动通过微信接口获取openid作为登录凭证,而不需要用户填写用户名密码,因此,其注册和登录方法是统一的,都是使用用户组件的”发起小程序/公众号登录“方法。
如用户表中已存在该用户的openid,则”发起登录“方法会直接返回当前用户的用户信息,如用户表中尚无该用户的openid,则”发起登录“的方法,会在用户表中新插入一条数据,即注册了一个新用户。
无论是小程序登录还是公众号登录,都有两种类型,一种是需要获取头像昵称,一种是不需要头像昵称。如果选择需要头像昵称,则用户表中会将当前微信用户的头像和昵称自动填入头像昵称字段,如果不需要,则头像昵称不会自动填入。注意,无论是小程序或公众号应用,如果需要获取用户头像昵称,都需要用户手动授权。具体方法如下:
无论是手机号还是邮箱注册,都需要验证用户的注册手机或邮箱。以手机号注册为例,整个注册流程如下:
注意,为了防止恶性刷短信验证码,每次发送短信验证码之前,都需要有一个图片验证码过程。详细的操作步骤如下:
step1&step2:获取图片验证码并存储图片ID
step3:请求发送短信验证码
请求时需要将图片验证码的ID、用户填写的图片验证码的结果以及用户填写的手机号发送至后台,并将发送短信的类型选择为“注册验证”。
如发送成功,则提示用户已成功,请查收短信:
如发送失败,则提示用户用户失败原因,也可以自动再请求一个新的图片验证码:
step4:发起注册
最后一步,将用户的填写的手机号、短信验证码、昵称和密码发送至后台,发起用户注册。
用户注册后,后台会返回注册结果和失败原因,如果注册失败,我们需要提示用户失败的原因:
具体手机注册与登录的教程,详见视频中心-》经典模型-》手机号注册登录教程。
每种注册/登录类型的用户登录方法也不同。微信公众号与小程序类型的登录,只需要调用用户组件的“发起小程序/公众号登录”方法即可,其注册与登录的方法是一体的,详见本文档“用户注册概览”部分。
手机和邮箱类型的登录,则分为两种类型:
1、用户手动登录:此时,用户需要填写用户名和密码进行登录(如为手机登录,用户名则为手机号,如为邮箱登录,用户名则为邮件地址)
2、初始化自动登录:用户登录一次之后,后台会通过http only 的cookie(即后台服务设置的cookie)将当前用户的登录令牌存储在客户端浏览器,我们可以在应用初始化的时候,通过此登录令牌去换取当前用户的信息。因此,用户只要不手动清除cookie,就可以在应用初始化时自动登录,无需再次输入有户名密码。
两种类型的登录原理如下:
手动登录的具体操作如下(以手机号登录为例):
登录后,后台会返回登录结果,包括以下信息可以供前端使用:
自动登录,通常是在项目初始化时进行,调用用户组件的"获取当前用户信息":
完成之后,后台会返回当前用户“是否匿名”,如返回“是否匿名”为否,则说明成功获取了当前用户的信息,自动登录成功。如“是否匿名”返回为是,则说明并未获取到当前用户信息,需要用户进行手动登录:
为了保证后台服务的安全性,用户组件提供了用户权限设置功能。针对后台的每一个服务,都可以设置访问权限。具体来说,每一用户都可以对应一个用户类型,每一个用户类型可以对应一种到多种用户角色,每种用户角色,可以对应一个或多个后台服务。如下图所示:
step1:定义用户角色
要设置用户权限,我们首先要定义用户角色。在以下例子中,我们的后台有三个服务:
我们定义三个用户角色,普通权限、高级权限和管理权限,然后设置每种权限对三个服务的访问权限:
step2:定义用户类型
然后,我们定义三种类型的用户:普通用户、VIP用户以及管理员。其中,普通用户,对应普通权限,VIP用户,对应高级权限,管理员,则对应高级权限+管理权限,即可以访问到所有的三个服务。
step3:设置用户类型
接下来,我们只需要在用户注册时设置用户类型即可,比如,我们将用户注册为VIP用户:
用户类型也可以通过用户组件的“更新”方法进行修改,比如,用户注册时为普通用户,后来可以升级为VIP用户,此时,只要将该用户的“用户类型”更新为“VIP用户”即可。
我们也可以手动在用户表中修改用户类型:
用户类型设置完成后,后台就会自动根据当前用户类型,来判断该用户是否有权限调用某个服务。如果判断为否,则会直接在调用服务时返回失败。这样,即使有黑客破解了应用前端代码,也不能通过模拟调用服务的方法去越权调用服务了。