【问题标题】:Update hash password with mongodb使用 mongodb 更新哈希密码
【发布时间】:2021-01-13 21:19:41
【问题描述】:

我正在尝试更新我的用户文档以更改密码,但是当我将 bcrypt 哈希密码作为 $2a$10$lnTLIgnOWuoolOkqBfzcd.0pNLFtstX20p8KJNQmKkL.6D.W7Zu0a 传递时,mongodb 会忽略字段密码

如果我删除第一个 $ 就可以了。

我的更新函数

func (r Repo) Update(id string, updUsr interface{}) (User, error) {
    // uid work

    filter := bson.M{"_id": bson.M{"$eq": uid}, "deleted_at": nil}
    update := []bson.D{
        {primitive.E{
            Key:   "$set",
            Value: updUsr,
        }},
        {primitive.E{
            Key: "$addFields",
            Value: bson.D{primitive.E{
                Key:   "modified_at",
                Value: time.Now(),
            }},
        }},
    }

    res := r.col.FindOneAndUpdate(
        r.ctx,
        filter,
        update,
    )
    if res.Err() != nil {
        // err
    }

    // decode work

    return u, nil
}

我的更新函数调用

// doesn't work
updPwd := password{
    Password: "$2a$10$lnTLIgnOWuoolOkqBfzcd.0pNLFtstX20p8KJNQmKkL.6D.W7Zu0a",
}

// working version 
updPwd := password{
    Password: "2a$10$lnTLIgnOWuoolOkqBfzcd.0pNLFtstX20p8KJNQmKkL.6D.W7Zu0a",
}

_, err = us.Update(uid, updPwd)
if err != nil {
    // err
}

我不知道如何将我的散列变量传递给 mongodb 实际上只是删除我的密码密钥,因为我像密码一样处理是一个空值,如果我删除第一个 $ 标志我的更新是成功的。

感谢每条评论!

谢谢

【问题讨论】:

  • 发布更新失败返回的错误。
  • @OptimusPette 我没有错误,只需在您更新密码时从我的文档中删除我的密钥密码:“”

标签: mongodb go mongodb-query aggregation-framework


【解决方案1】:

在更新操作中,以美元符号$ 开头的字符串值被视为变量引用并替换为相应的值。

您可能需要使用$literal 运算符将该字符串视为值而不是变量。

【讨论】:

  • 感谢@Joe,我 5 分钟前刚刚在文档中看到过,祝你有美好的一天
猜你喜欢
  • 1970-01-01
  • 2020-09-15
  • 2017-03-08
  • 2014-07-15
  • 1970-01-01
  • 1970-01-01
  • 2012-08-21
  • 2020-04-23
  • 1970-01-01
相关资源
最近更新 更多