uni-app uni-id 设置密码逻辑有问题

uni-app uni-id 设置密码逻辑有问题

操作步骤:

  1. 需求场景:通过三方绑定账号后,设置密码
  2. 当前uni-id 设置 密码set-pwd方法,仅支持通过手机验证码设置,(或者通过手机验证码、邮箱验证码重设密码)
  3. 但是这两项都不符合当前使用场景。我只需要个密码而已。
  4. 同理,也无法再设置 用户名+密码登录。因为已经绑定了三方账号,没法再走注册流程,

总结:

  1. 三方登录后,就只能使用手机或者邮箱来绑定了,无法设置用户名+密码登录了。

预期结果:

  1. 需求场景:通过三方绑定账号后,设置密码
  2. 当前uni-id 设置 密码set-pwd方法,仅支持通过手机验证码设置,(或者通过手机验证码、邮箱验证码重设密码)
  3. 但是这两项都不符合当前使用场景。我只需要个密码而已。
  4. 同理,也无法再设置 用户名+密码登录。因为已经绑定了三方账号,没法再走注册流程,

总结:

  1. 三方登录后,就只能使用手机或者邮箱来绑定了,无法设置用户名+密码登录了。

实际结果:

  1. 需求场景:通过三方绑定账号后,设置密码
  2. 当前uni-id 设置 密码set-pwd方法,仅支持通过手机验证码设置,(或者通过手机验证码、邮箱验证码重设密码)
  3. 但是这两项都不符合当前使用场景。我只需要个密码而已。
  4. 同理,也无法再设置 用户名+密码登录。因为已经绑定了三方账号,没法再走注册流程,

总结:

  1. 三方登录后,就只能使用手机或者邮箱来绑定了,无法设置用户名+密码登录了。

bug描述:

  1. 需求场景:通过三方绑定账号后,设置密码
  2. 当前uni-id 设置 密码set-pwd方法,仅支持通过手机验证码设置,(或者通过手机验证码、邮箱验证码重设密码)
  3. 但是这两项都不符合当前使用场景。我只需要个密码而已。
  4. 同理,也无法再设置 用户名+密码登录。因为已经绑定了三方账号,没法再走注册流程,

总结:

  1. 三方登录后,就只能使用手机或者邮箱来绑定了,无法设置用户名+密码登录了。
2 回复

你可以自己写方法来修改


在使用 uni-app 的 uni-id 模块时,如果发现设置密码的逻辑有问题,可能是由于以下几个原因导致的。以下是一些常见的问题及其解决方法:

1. 密码强度校验问题

  • 问题描述:密码强度校验不够严格,导致用户可以设置过于简单的密码。
  • 解决方法:在设置密码时,增加密码强度校验逻辑。可以使用正则表达式来校验密码的复杂度,例如要求密码必须包含大小写字母、数字和特殊字符,并且长度至少为8位。
function validatePassword(password) {
    const regex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/;
    return regex.test(password);
}

if (!validatePassword(newPassword)) {
    uni.showToast({
        title: '密码必须包含大小写字母、数字和特殊字符,且长度至少为8位',
        icon: 'none'
    });
    return;
}

2. 密码确认逻辑问题

  • 问题描述:用户在设置密码时,两次输入的密码不一致,但系统没有进行校验。
  • 解决方法:在设置密码时,增加密码确认逻辑,确保两次输入的密码一致。
if (newPassword !== confirmPassword) {
    uni.showToast({
        title: '两次输入的密码不一致',
        icon: 'none'
    });
    return;
}

3. 密码加密问题

  • 问题描述:密码在存储或传输过程中未进行加密,存在安全隐患。
  • 解决方法:在存储或传输密码时,使用加密算法对密码进行加密。uni-id 模块通常会使用 bcryptmd5 等加密算法对密码进行加密。
const bcrypt = require('bcrypt');
const saltRounds = 10;

bcrypt.hash(newPassword, saltRounds, function(err, hash) {
    if (err) {
        console.error('密码加密失败', err);
        return;
    }
    // 存储加密后的密码
    savePassword(hash);
});

4. 密码重置逻辑问题

  • 问题描述:用户在重置密码时,未验证旧密码或未通过短信/邮箱验证。
  • 解决方法:在重置密码时,先验证用户的旧密码或通过短信/邮箱验证用户的身份。
// 验证旧密码
bcrypt.compare(oldPassword, storedPasswordHash, function(err, result) {
    if (err || !result) {
        uni.showToast({
            title: '旧密码不正确',
            icon: 'none'
        });
        return;
    }
    // 旧密码正确,允许重置密码
    resetPassword(newPassword);
});

5. 密码存储问题

  • 问题描述:密码以明文形式存储在数据库中,存在安全隐患。
  • 解决方法:确保密码在存储时已经过加密处理,不要以明文形式存储密码。

6. 前端与后端密码校验不一致

  • 问题描述:前端和后端对密码的校验规则不一致,导致用户在前端设置的密码在后端校验不通过。
  • 解决方法:确保前端和后端使用相同的密码校验规则,或者在前后端之间传递校验结果。

7. 密码修改未触发相关事件

  • 问题描述:用户修改密码后,未触发相关的安全事件(如通知用户密码已修改)。
  • 解决方法:在密码修改成功后,触发相关事件,例如发送通知邮件或短信给用户。
function onPasswordChanged(userId) {
    // 发送通知邮件或短信
    sendNotification(userId, '您的密码已成功修改');
}
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!