用户信息修改时,用户身份的验证

类似微信那种 用户改个人信息。用户不是已经登录了吗?就有密码这些,要去后端修改信息,携带用户名或密码,就行了呀?它为什么还要一个输入密码呢?

img

我们后端写了有需要输入 用户Id,用户名,密码,三个,在用户登录时已经存储在手机数据库里面了,需要修改用户信息时,就携带这三个参数去修改,不知道这样对不对?
下面是后端的验证代码

if (uId == null || uId.equals("")) {
            jsonObject.put(Consts.CODE, 0);
            jsonObject.put(Consts.MSG, "uId不能为空");
            return jsonObject;
        }

        if (uName == null || uName.equals("")) {
            jsonObject.put(Consts.CODE, 0);
            jsonObject.put(Consts.MSG, "用户名不能为空");
            return jsonObject;
        }
        if (uPassword == null || uPassword.equals("")) {
            jsonObject.put(Consts.CODE, 0);
            jsonObject.put(Consts.MSG, "密码不能为空");
            return jsonObject;
        }

出于安全考虑呀,特别是用户去修改比较重要的用户信息比如 手机号绑定(特别重要) 身份证绑定 银行卡绑定 微信 支付宝绑定(支付相关,第三方登录相关)等等等等 这些重要的用户信息 肯定需要再次确认用户是否本人 不然万一是他人拿了用户的手机 不需要再次确认就改了这些信息肯定不行的

这样做是出于安全考虑,防止不是本人吧。
其次密码会进行加密,不会是明文。
用户登录以后id和用户名已经有了不用输入,可以让它输入密码就行了。
可以把这个密码改成与密码不同的二级密码。

首先密码作为敏感数据,不会存在本地(如果这样,我只要拿到手机就能重缓存或cookie取出密码——那不是黑客简单就盗号了??)

修改信息:输入密码,后台用于验证是否是本人操作,避免他人伪造,直接调接口修改(当然这里也可以手机短信验证)

正常业务流程:
已登录:只需输入密码,后台对比即可
未登录:则需要手机短信验证(如忘记密码逻辑);

img


这里不是都告诉你了吗 这一些敏感操作 都需要提供密码进行验证的
一般前端修改密码操作只需要 提供密码即可 账号 ID 后端都可以根据请求去数据库中查询获得
然后比较两个加密后的密码 成功即可进行更改
修改密码接口 最好也要提供当前密码参数 或者 修改密码与比较密码写在同意接口中
否则 当前密码校验过后 单纯调用修改密码接口不进行验证的话风险极大

敏感操作都是需要二次验证的,如果有人盗取了登陆token或者被中间人截获了数据的话,登陆验证就都是伪造的了,所以敏感操作需要即使二次验证

这是安全性的问题不是技术性的问题。