在 mongodb 中,作为密钥而不是匿名用户的用户名和密码传递啥?

Posted

技术标签:

【中文标题】在 mongodb 中,作为密钥而不是匿名用户的用户名和密码传递啥?【英文标题】:what to pass as key instead of username and password for anonymous users in mongodb?在 mongodb 中,作为密钥而不是匿名用户的用户名和密码传递什么? 【发布时间】:2020-02-15 10:21:25 【问题描述】:

我正在尝试创建一个 mongodb 架构,在该架构中我允许该人匿名发布项目,我已经拥有经过身份验证的用户架构,并且我正在考虑仅使用它来允许用户发布他们的项目!关于我应该如何进行的任何想法?

例如:就像匿名用户的真实性应该是什么一样,它应该是所有用户的相同密钥,还是每个用户的不同密钥等等......我对数据库相当陌生,我很困惑。对我有什么建议吗? 架构用户:

const UserSchema = new Schema(
  full_name: 
    type: String,
    required: true
  ,
  username: 
    type: String,
    required: true
  ,
  email: 
    type: String
  ,
  password: 
    type: String,
    required: true
  ,
  avatar: 
    type: String
  ,
  date: 
    type: Date,
    default: Date.now
  ,
  projects: [ type: Schema.Types.ObjectId, ref: "projects" ]
);

谢谢

【问题讨论】:

一个问题,你希望匿名用户发布项目,还是希望注册用户(有登录名和密码)匿名发布项目? 匿名用户发布项目和数据应该存储在db中 对于匿名用户,只需放弃用户模型的概念。允许在没有用户的情况下创建您的项目 如果用户是匿名的,你如何将他们与用户模型联系起来?你不能......也许在“项目”上添加一个字段,如“Project.anonymous”=布尔值。这确实意味着您用于创建项目的端点必须不受保护。 @Raju 这取决于您在项目中存储的内容,我建议不要存储文件,但简单的 JSON 对象就可以了。 【参考方案1】:

mongodb 中的每个文档都有一个自动生成的唯一 _id 字段,因此您可以使用该字段来识别每个匿名用户。

我的建议是使用cookies来验证用户,你可以使用像passport.js这样的库来验证用户并保存它的mongodb唯一_id,所以当这个用户向你的服务器发送请求时,你可以得到它的_id像这样req.user._id

一个可能的缺点是,当匿名用户清除其 cookie 时,他会失去身份验证,从而失去对其项目的访问权限。

【讨论】:

那么,不,先生,我不希望数据丢失。可以看看@DanStarns 的评论 数据库中的数据不会丢失,只是匿名用户无法跟踪其项目,因为他失去了身份验证,例如,如果您希望每个人都看到所有匿名项目,那么您根本不需要验证用户,只需在项目架构上放置一些标识符以显示该项目没有用户 哦,对了,我有一个gallery.page,所以我想那没关系。

以上是关于在 mongodb 中,作为密钥而不是匿名用户的用户名和密码传递啥?的主要内容,如果未能解决你的问题,请参考以下文章

匿名身份验证用户的这个 Firebase/Firestore 安全规则是不是安全?

发布/订阅请求身份验证作为服务(或通过服务密钥)而不是 Auth0 临时密钥

Spring-security 阻止匿名用户从 MongoDB 中提取数据

如何在 Android 上使用 IAM 或 Cognito Pool 作为身份验证方法而不是 API 密钥

如果匿名用户无权访问 URL,如何将他们重定向到自定义页面而不是登录页面?

python的匿名函数