在 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 密钥