任何应用,只要不是纯展示类的,我们都需要鉴别当前访问的用户。比如,用户的登录之后,可以获取到他个人的订单信息,可以查看自己收藏的商品,或限制他的投票或抽奖次数等等。
1、用户登录与获取用户信息的基本原理
在ivx中,我们提供多种用户登录的方法,比如,手机+密码登录,邮箱+密码登录,微信登录等等。无论是何种方式登录,用户登录的基本流程和原理都是一样的,如下图所示:
用户登录成功之后,服务端除了返回用户信息,也会同时向客户端设置一个cookie(http only的cookie),用来存储当前用户的登录令牌(这个登录凭证是后台生成的一个随机字符串,对应当前用户记录,但不包含任何用户信息)。
在应用编辑中,我们只需要调用用户组件的登录动作即可,当然,根据用户注册的类型,可以发起各种不同类型的登录:
有了这个登录令牌之后,下一次用户打开应用之后,就可以直接通过这个令牌,来获取用户信息,如下图所示:
这个登录令牌,会在用户组件的“获取当前用户信息”的动作中自动发送给后台服务端,我们只需要在前端直接调用这个动作即可。
因此,只要用户不手动清除cookie,用户第一次登录之后,就可以自动获取登录状态,不需要再次添加用户名密码进行登录了。
2、数据库中的“提交用户”
用户登录之后,用户与后台数据库的任意交互,都会带上cookie中的用户令牌,用来鉴别当前用户,并将当前用户的用户名,记录在数据表中的“提交用户”字段中。(提交用户是每个数据表的默认自带字段,无法删除)
这个提交用户,即当前用户的用户名,由于ivx中用户登录有多种方式,用户名的格式也有多种形式。比如,用户是通过小程序登录,那“提交用户”中记录的用户名就是该用户的微信openID。通常情况下,一个应用只提供一种登录方式,因此所有的提交用户也是统一格式的,但如果我们同时提供多种登录方式,那我们可能会得到以上混杂类型的提交用户。
数据库的提交用户,可以用来按用户进行过滤,比如输入当前用户提交的信息(比如获取个人订单,个人历史记录等),只需要在筛选条件中选择提交用户=“当前用户”即可(当前用户是个默认选项,可通过下拉菜单选中)
另外,数据库的提交限制,也是针对登录用户进行判断的:
因此,如果同一个用户更换了登录方式,比如同一个设备用两个微信账号登录,那他的提交限制也会按新账号的提交限制来计算。
3、匿名用户
如果用户没有进行任何形式的登录(即cookie中没有任何登录令牌),就进行数据库提交,系统将随机生成一个匿名用户,这个匿名用户也对应一个随机用户名,当用户进行数据库提交时,这个随机用户名将作为“提交用户”存储到数据库中。
因此,即使不进行用户登录,我们直接在PC中预览应用时,数据库的提交限制依然生效,因为系统会自动生成一个随机用户,只要不手动清楚cookie,同一个浏览器的随机用户会一直保持一致。
4、确认用户的登录状态
通常,我们在应用初始化的时候去判断用户当前是否已登录,即cookie中是否已存在用户登录令牌,如果已存在,就直接获取用户信息,如果不存在,则发起用户登录来获得令牌。如下图所示:
以微信登录为例,在事件面板中以上逻辑的设置如下: