meteor - 如何允许相同的用户名但不同的公司注册?
问题描述
在 Meteor 中,如何允许相同的用户名但不同的公司注册?
我想设置用户名唯一:假如何自定义帐户包?
accounts_server.js
users._ensureIndex('username', { unique: true, sparse: true });
解决方案
在您的系统中拥有唯一的用户名有充分的理由,尤其是完整性和验证。规避此功能可能会导致潜在风险,并且可能会破坏accounts
软件包的稳定性,因为它们是围绕用户是唯一的假设而构建的username
或email
。
您可以在源代码中看到,它Accounts.createUser
正在检查唯一的用户名和电子邮件,独立于原始 Mongo 集合。
如果您仍然坚持要覆盖此行为(我强烈建议不要这样做),则需要手动执行所有操作(此处不包括验证):
import { Meteor } from 'meteor/meteor'
const createUser = ({ username, password, company }) => {
if (Meteor.users.find({ username, company }).count() > 0) {
throw new Error(`Account already exists for ${username}@${company}`)
}
const userId = Meteor.users.insert({ username, company })
Accounts.setPassword(userId, password)
return userId
}
Meteor.startup(() => {
Meteor.users.rawCollection().dropIndex('username_1')
Meteor.setTimeout(() => {
createUser({ username: 'johndoe', password: 'password', company: 'Software Inc.' })
createUser({ username: 'johndoe', password: 'password', company: 'Pro Software' })
}, 1000)
})
通过这样做,您需要使用自己的实现覆盖所有 Accounts 方法(尤其是身份验证和登录)。但是,正如我所说 -最好不要这样做。
更好的解决方案:改用电子邮件
用户名和公司名称的组合已经包含在电子邮件模式中。
因此,最简单的解决方案是实施基于 的帐户email
,而不是基于username
:
const createUser = (email, password, company) => {
const userId = Accounts.createUser({ email, password })
Meteor.users.update(userId, { $set: { company }})
return userId
}
推荐阅读
- python-2.7 - 使用索引设置 Pandas DataFrame 中不同列的值
- c# - 使用 EPPLUS c# 将所有列放在一页上
- css - 在模块化css中设置具有状态值的ClassName react
- sql - 当记录向上或向下移动时 SQL Server 重新排序序列号
- powershell - 使用 PowerShell 计算日志文件中的唯一错误消息
- datetime - 在 JHipster + Angular2+ 项目中更改 DATE_TIME_FORMAT 常量
- python - 如何在 python 中使用 np.pad 填充图像?
- python - 我可以在没有请求的情况下检查连接并实时回复吗
- hadoop - 使用远程元存储在亚马逊 EMR 中创建 s3 外部表
- c# - 在 Excel 工作表中导出带有价格的 € 符号,结果为 €