注册

环信web、uniapp、微信小程序SDK报错详解---登录篇

项目场景:


记录对接环信sdk时遇到的一系列问题,总结一下避免大家再次踩坑。这里主要针对于web、uniapp、微信小程序在对接环信sdk时遇到的问题。主要针对报错400、404、401、40


(一) 登录用户报400



原因分析:

从console控制台输出及network请求返回入手分析

可以看到报错描述invalid password,密码无效,这个时候就需要去排查一下该用户密码填写是否正确


排查思路:

因为环信不保存用户的密码,可以在console后台或者调用修改密码的restapi来修改一下密码再重新登录(修改密码目前只有这两种方式)




(二) 登录用户报404



原因分析:

从console控制台输出及network请求返回入手分析

可以看到报错描述user not found,这个时候就需要去排查一下该用户是否存在于该项目使用的appkey下了


排查思路:

可以看一下console后台拥有这个用户的appkey和自己项目初始化时用的是否是同一个,若在console后台并没有查到该用户,就要注意这个用户是否真的没有注册





(三) 登录用户报40、401




原因分析:

报错40或者401一般都是token的问题,需要排查一下token是否还在有效期,token是否是当前用户的用户token

40的报错还有一种情况,用户名密码登录需要排查用户名及密码传参是否都是string类型


注:此处需要注意用户token和apptoken两种概念

用户token指的是该用户的token,一般只用于该用户在客户端使用环信 token 登录和鉴权

app token指的是管理员权限 token,发送 HTTP 请求时需要携带 app token

token较为私密,一般不要暴露出去


排查思路:

排查用户名及密码传参是否都是string类型,这个可以直接将option传参打印出来取一下数据类型看看是否是string

关于token排查,现在没有合适的办法直接查询token是否还在有效期或者是不是当前用户的token,只能通过api调用看是否报错401,可以在console后台直接获取新的用户token来测试一下




是不是当前用户的token也可以找环信的技术支持帮忙查,但在不在有效期他们也查不了


话外

有人遇到为什么已经open成功了但是还会报错?


这里要注意open只能证明获取到了token,证明不了已经建立了websocket连接,只有触发onOpened或者onConnected回调 只有onOpened或者onConnected回调触发,才算真正与环信建立连接。所以也不能在open返回的success或者.then中做任何逻辑处理,此外还要注意监听回调一定要放在调用api之前,在调用任何一个api时都要保证监听挂载完毕,包括open


如何判断自己是否在登录状态?


可以用以下三种方法中的一种判断当前用户是否在登录状态~

1、WebIM.conn方法下有一个logOut字段,该字段为true时表明未登录状态,该字段为false时表明登录;

2、WebIM.conn.isOpened () 方法有三个状态,undefined为未登录状态,true为已登录状态,false为未登录状态,可以根据这三个状态去判断是否登录;

3、通过onOpened 这个回调来判断,只要执行了就说明登录成功了,输出的话,输出的是undefined


三者选其一判断登录状态


0 个评论

要回复文章请先登录注册