更改姓名是计算机科学中一个尚未解决的难题
有个书呆子笑话说,计算机科学中只有两个难题:
- 命名事物
- 缓存失效
- 因一个错误而关闭
最近,我经历了一次改名的有趣经历。我有我的名字:我每天使用的名字,我认同的名字,我真正回应的名字。我也有我出生时的名字,或者用跨性别的俗话说,我的“死名”。我不再真正认同这个名字,但它却像一个游荡在欧洲的幽灵一样,一直跟随着我。现在,我听到我的死名和意识到有人在指我之间,出现了明显的差距。看到这些变化如此之快,真是有趣。
所以,这引出了我写这篇文章的主要想法。作为一个行业,我们非常不接受人们改名。在这篇文章中,我会举一些我见过的错误例子。我会告诉你如何让你的申请更适合那些改名的人。让我们开始吧!
Google 帐户和单点登录
免责声明:我为 Google 工作。本节内容仅代表我个人的观点和理解,并不代表 Google LLC 或 Alphabet Inc. 的观点或看法。我认为 Google 已经为简化姓名更改工作做了很多努力,对此我深表感谢,但一些使用 Google API 的人在这方面做得并不好。
Google 帐户有两种类型:个人帐户和 Google 的企业帐户 GSuite。每个 Google 帐户都有一个主电子邮件地址,以及零个或多个与之关联的别名。需要注意的是,同一帐户的主电子邮件地址可以更改。
因此,如果您的用户名是alice@somegsuitedomain.com,则可以改为bob@somegsuitedomain.com。这样一来,您的帐户、收件箱以及所有 Google 应用的访问权限都将保留在同一个帐户下。在后台,有一个与帐户关联的稳定标识符,当电子邮件地址更改时,该标识符不会更改。换句话说,电子邮件地址不是 Google 帐户的主键。当您更改 Google 电子邮件地址时,Google 会为旧电子邮件地址设置一个永久的、不可删除的别名。这意味着,如果您向旧地址发送电子邮件,收件人将会收到。但是,我想如果您问大多数人,他们会告诉您他们不想看到它。
如果您的应用程序通过 Google 实现单点登录,则您应该关闭稳定 ID,而不是电子邮件地址或名称。如果您将电子邮件和名称存储在数据库中,则当 Google 告诉您它们已更改时,您应该更改它们。
让我们看看如何使用 Google 的 OAuth API 来实现这一点。我在 Rails 中设置了基本的OAuth 工作流程,从我的帐户返回的第一批详细信息如下(部分内容已删除):
{"provider"=>"google",
"uid"=>"113017XXXXXXXX8346486",
"info"=>
{"name"=>"Penelope Phippen",
"email"=>"penelope@rubycentral.org",
"unverified_email"=>"penelope@rubycentral.org",
"email_verified"=>true,
"first_name"=>"Penelope",
"last_name"=>"Phippen",
"image"=>"https://lh3.googleusercontent.com/-Tj-GuDdntsY/AAAAAAAAAAI/AAAAAAAAAAA/ACHi3rfGmAsSR_4ZenyOeMkId6EERxmFIg/s50-c/photo.jpg"},
现在,值得注意的是,与此帐户关联的电子邮件地址以前是不同的。每次您使用此帐户进行 OAuth 交换时,它都会返回新的电子邮件地址和名称。因此,正确的做法是,每次收到新的 OAuth 负载时,都使用新的电子邮件地址和名称更新您的用户记录。如果用户名称已更改,您可以假设这是故意更改的,并据此进行更新。始终稳定的是字段uid
,它实际上来自sub
原始 OAuth 响应中的字段。
让我改一下我的用户名吧,你们这些胆小鬼。
接下来是拥有自己身份验证的应用程序系列。在电子邮件成为识别用户的标准方式之前,我们使用的是用户名。许多应用程序早已不再允许用户指定用户名。这些应用程序现在仅使用电子邮件地址进行身份验证。
我发现某些应用程序不允许更改用户名。在我更改用户名之前,我一直使用我的旧用户名作为我的主要互联网标识符。如果我无法更改用户名,并且我在你的应用程序上积累了大量数据,我不想销毁我的帐户并创建一个新帐户。这导致我陷入了你的应用程序反复使用旧用户名的境地,而我对此无能为力。请构建用户名的可替换性,让用户自行更改。出于对一切神圣事物的热爱,请不要使用用户提供的字符串作为数据库主键。
不允许重复使用用户名
这是一款安全/防骚扰工具。在GitHub和Twitter等网站上,你可以更改与你的帐户关联的用户名,这很棒。然而,这带来了一个新问题:旧用户名该如何处理?
GitHub 和 Twitter 都允许在你更改旧用户名后立即注册新用户名。在 Twitter 上,这意味着当有人更改用户名时,你可以立即冒充他们的旧身份。在 GitHub 上,这意味着如果有人使用你的旧用户名拉取软件,有人可能会立即用恶意软件替换你的代码库。
在这两个网站上,我现在都有“抢注者”账户,用的是我的旧名字。这主要是对我自己以及关注我作品的人的一种安全保护。我编写了不止一个非常流行的软件包。人们可能会用 git 克隆这些软件包作为他们的依赖管理策略(请不要这样做)。值得注意的是,GitHub 会设置重定向,直到有人用相同的用户名创建同名的仓库,但针对性的攻击几乎是轻而易举的。在 Twitter 上,我不希望有人占用我的旧名字并冒充我。
事实是,几乎可以肯定的是,重复使用用户名是你绝对不想发生的事情。除非你的应用程序完全没有安全隐患或骚扰机会,否则让别人占用某人的旧名会导致问题。正确的做法很可能是将旧名下的所有内容重定向到新名下,并且不允许任何人与旧名下的数据进行交互。
缓存其他标识符的名称
我第一次在现实生活中遇到这种情况是在一家餐厅的虚拟排队系统中。他们问我的名字,我说“Penelope”,然后他们问我的电话号码。我乖乖地给了他们我的电话号码(自从我搬到美国后就没变过)。后来,他们发短信告诉我我的座位准备好了,短信里却写着我的旧名字。虽然很烦人,但我觉得这没什么大不了的。后来,当我回到餐厅时,我和我的朋友们被告知,[我的旧名字] 的座位已经准备好了。
这次互动最让人恼火的是,我已经给他们报了我的名字。那个虚拟排队系统从之前的互动中抓取了我的名字,然后在我给他们我的新名字时没有正确地使其失效。据我所知,通过他们的网站回溯后,我无法在他们的系统中手动更改我的名字。所以我估计我这辈子都会被这个系统当作死名了。我的另一个选择是更改我的电话号码,这显然很烦人。
这里的教训是,姓名与其他标识符之间是可以互换的。就电话号码而言,它们可以被重复使用。一个电话号码长期只属于一个人,这是例外,而不是常态。就我而言,这个天真的例外导致我的生活充满了更多令人烦恼和不安的互动。
大多数情况下你甚至不需要用我的法定姓名
现在我们来谈谈在互动过程中使用我的法定姓名是必须的。如果您是政府机构、金融机构或其他类似机构,我理解贵公司需要知道我的法定姓名。没关系,我很快就会更改我的法定姓名,但与此同时,我想指出的是,您不必一直使用我的法定姓名。
举个例子,让我们想想我使用的一款投资应用程序。当我设置帐户时,他们采用了我的法定全名来验证我的身份。从那以后,他们就用这个名字给我发电子邮件。甚至在我改名之前,我大多数事情都没有使用我的法定全名。我用了一个简短的版本。他们所有的产品邮件都寄给我的法定姓名,这感觉很奇怪而且过于正式。我不能给他们设置不同的名字。现在我已经改了名字,一些事情暴露了我的法定姓名,而这绝对 100% 不需要。一份简单的声明不需要使用我的法定姓名。从他们的角度来看,Hey <legal deadname>, here's your balance
和之间没有区别Hey Penelope, here's your balance
。与银行对账单不同,这些电子邮件不能用于地址证明或类似证明,因此它们不需要那么正式。
我还想指出,法定姓名是可以更改的。更改我的非法定姓名已经与科技公司进行了足够多的斗争,我一定会在以后的文章中详细说明如何在所有地方更改我的法定姓名。与此同时,看看你是否可以做一些工作,让大家更容易地更改你在应用中的称呼。
一个更极端的例子是,我的法定姓名被不必要地使用,比如我在电话里和信用卡公司通话时。他们只知道我的法定身份,但如果我在电话里能用一个不同的名字和敬语(miss
而不是sir
),我会感觉舒服得多。同样,在这种情况下,这样做对他们没有影响,但对我影响很大。我也不觉得应该只是说
“嘿,这看起来有点奇怪,但你能叫我菲彭小姐吗?”。如果你的申请确实需要法定姓名,请考虑设置一些字段,比如首选姓名、代词和敬语,以便你的员工/沟通人员在大多数情况下可以用来称呼对方。
结论
亲爱的读者,这篇文章甚至还没有涵盖所有你可能无法更改用户名的情况。OS X 和 Windows 都会将你的用户名刻录到操作系统安装中,你需要重新安装才能彻底删除它。有很多东西可能总是会给我显示错误的名称。不过,这篇文章提供了一些解决这个问题的实用技巧。我希望你能尽己所能,让我们所有人都能更轻松地完成更改,毕竟你拥有控制权。
这是我给你的请求:如果你正在开发的产品涉及使用某人的姓名、代词或敬语,请提供方便用户自行更改的功能。这对很多人来说是一种基本的尊严,对我来说也意义重大。
我是从一位跨性别者的角度来谈这个问题的,我改了名字,以此来表明我身份的重大改变。这并非人们改名的唯一原因(例如:结婚、父母离婚等等),但到目前为止,我的用例在某种程度上对各种计算机系统进行了压力测试。
对于所有人来说,按照自己想要的方式生活,是一种基本的尊严。在开发计算机系统时,请牢记以下几点:
- 一个人的名字一生中可能会改变一次或多次(而且很有可能会改变)。
- 当这种情况发生时,人们会想要更改多个标识符,包括电子邮件地址和用户名
- 如果你的应用程序不允许这样做,那么这个人可能会因为这种不灵活性而遭受巨大的痛苦或痛苦
- 法定姓名是人们可能不希望经常与之联系在一起的,你应该允许人们给你另一个名字来指代他们,然后在大多数时候使用这个名字
- 如果你想让你的应用程序对更广泛的人群更加友好,你应该支持做出这些改变
非常感谢你的阅读。如果你喜欢这篇文章,欢迎在 Twitter 上关注我@penelope_zone。
文章来源:https://dev.to/penelope_zone/changing-your-name-is-a-hard-unsolved-problem-in-computer-science-kjf