You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用mongoose-encryption加密后登录失败、页面持续加载问题求助

问题根因

你启用mongoose-encryption加密password字段后,数据库不会再存储明文的password字段,加密内容会被存到你数据库记录里看到的_ct、_ac这类内置字段中,所以你直接把明文密码作为查询条件查找用户时,MongoDB里根本没有对应的password字段匹配,自然查不到用户。

另外你页面一直加载的原因是:登录逻辑中查询不到用户的分支里,你只打印了错误日志,没有给前端返回任何响应,前端会一直等待服务端返回结果,就会出现加载卡死的情况。

修复方案

修改登录查询逻辑:先仅通过邮箱查询用户,mongoose-encryption会在查询到用户后自动解密还原password字段,再手动比对用户输入的密码和解密后的密码是否一致即可,同时给所有逻辑分支补充服务端响应。

修复后的登录接口代码示例

app.post('/login', (req, res) => {
    const email = req.body.username;
    const inputPassword = req.body.password;

    // 只传邮箱作为查询条件
    User.findOne({email: email}, (err, user) => {
        if(err) {
            console.error(err);
            return res.status(500).send('服务器异常,请稍后重试');
        }
        if(!user){
            console.error('You are never registered!');
            // 替换为你实际的未注册响应逻辑,比如跳回登录页
            return res.redirect('/login?msg=未找到该账号');
        }
        // 解密后的password可以直接比对
        if(user.password === inputPassword) {
            console.log('You are already registered!');
            res.render('secrets');
        } else {
            console.error('密码错误');
            // 替换为你实际的密码错误响应逻辑
            res.redirect('/login?msg=密码错误');
        }
    });
});

内容的提问来源于stack exchange,提问作者Codecygen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 14:45:07