我有一个应用程序,人们可以注册用户帐户。他们可以使用他们的谷歌帐户或使用电子邮件/密码注册。我将用户的displayName存储在Firestore中,以便我可以在整个应用程序中引用它作为他们的用户名。
但是,有一个问题:
假设“John Doe”在我的应用程序上注册了一个用户帐户,他使用名为 johndoe@gmail.com
的Google帐户。他的谷歌帐户的显示名称也是“John Doe”。然而,几天后,另一个同名“John Doe”注册了一个用户帐户,尽管他的Google帐户电子邮件可能不同(假设 johndoe2@gmail.com
),但他的显示名称仍然相同。现在,我的应用程序中有 2 个用户具有相同的显示名称“John Doe”。当我尝试创建用户名路由时,这会导致问题,例如:https://myapp.com/JohnDoe
和处理用户配置文件查找。
如果有其他用户可能使用相同的显示名称,那么允许用户使用其Google帐户的推荐方法是什么?问题是我不想在URL中存储uid,因为我希望它是干净的,只有显示名称。
很常见的情况是,URL的后缀是一些随机数字或字母数字字符的组合,如john-doe-1
等等。也就是说,您必须自己实现逻辑,可能需要使用Firebase Auth Triggers for Cloud Functions,它将在创建新用户时运行,您可以为其名称添加URL。
您还可以添加一些随机字符串,例如/users/john-doe-qwerty
,并可能添加一个付费功能,允许用户设置自己的URL(如果适用于您的应用程序),即虚荣URL。
问题是我不想在URL中存储UID,因为我只想用displayName来清理它。
它可能是干净的,只要< code>displayName中的字符数合理。在您的示例中,“John Doe”仅包含8个字符,包括名称之间的空白字符,这没问题。但是我见过太多名字大于28的例子,28是UID中的字符数。因为< code>displayName属性是在Google帐户中设置的,并且只能由用户更改,所以您还有三种解决方案。
第一种方法是创建自己的机制,在应用程序中设置特定的用户名。这些用户名可以特别由用户设置。它可以与谷歌帐户中的名称相同,也可以不相同。然而,当有人选择“JohnDoe”,而第二个用户想要设置相同的用户名时,这是不可能的,因为“JohnDoi”已经存在。因此,在设置新用户名之前,您应该始终检查该用户名是否已经存在。你可以这样做,因为这是你可以控制的。使用Firestore时,只需使用以下方法即可完成:
db.collection("users").whereEqualTo("userName", "JohnDoe");
或者当使用实时数据库时:
db.child("users").orderByChild("userName").equalTo("JohnDoe");
现在,第一个“无名氏”的侧写看起来像这样:
https://myapp.com/JohnDoe
虽然第二个可能有这样的东西:
https://myapp.com/John_Doe
看到下划线了吗?这种机制被广泛使用。Facebook、Instagram、Twitter、eBay、Reddit和其他许多网站都这样做:
https://www.facebook.com/JohnDoe/
https://www.instagram.com/JohnDoe/
https://twitter.com/JohnDoe/
https://www.ebay.com/usr/JohnDoe/
https://www.reddit.com/user/JohnDoe/
第二种是忽略用户名并仅使用来自身份验证过程的UID。在这种情况下,您的URL将如下所示:
https://myapp.com/TwentyEightCharactersLong
这并不罕见,因为其他大型应用程序都使用它:
https://www.imdb.com/user/$userId/
第三个是在 UID 和用户名之间创建组合。最好的例子是Stackoverflow:
https://stackoverflow.com/users/$userId/$userName/
// ^ ^
或LinkedIn:
https://www.linkedin.com/in/$userName-$userId/
// ^ ^
无论您应用哪种解决方案,您都会有唯一的URL。但这取决于你选择这些解决方案中哪一个对你来说更清楚。
它还说在上面的代码注释,URL必须是白名单,我如何才能创建电子邮件和添加到firebase白名单链接? 我很感激你的好心帮助。 提前谢了。
我已经实现了通过android应用程序添加单个用户,但不能同时注册多个用户。是否有一些java或android代码,这将允许我注册大量的用户在同一时间?
我正在使用onelogin java saml对我的应用程序的用户进行身份验证。SSO部分运行良好;但是,当我使用onelogin用户管理页面强制注销用户时,我看不到向我的服务提供商SLSendpoint发出的任何请求。我是否缺少打开SLO的配置? 这是我的onelogin配置: onelogin。saml2。strict=false-onelogin。saml2。debug=true onelo
所以,我只是想处理用户从应用程序注销时的情况。当用户注销时,我调用方法,它按预期工作,即用户不再收到推送消息... 但是,如果没有internet连接方法,则deleteToken()没有帮助。尽管用户已注销,但在建立连接时仍会收到推送消息。 我该怎么处理这件事?
我正在阅读Symfony通过自定义用户提供商管理用户的方法:https://symfony.com/doc/current/security/custom_provider.html 当用户提交用户名和密码时,身份验证层要求配置的用户提供程序返回给定用户名的用户对象。Symfony然后检查此用户的密码是否正确,并生成安全令牌 当我们在本地使用用户/密码连接到数据库时,这非常有效,但是我想对另一个服
我正在尝试创建一个应用程序,我必须注册用户,我正在使用Firebase进行注册,一旦我将所有数据放入register,然后进入Firebase数据库,我发现我自己并不是在测试模式下创建数据库的注册用户。你能解释一下我可能做错了什么吗? 注册用户代码: 我正在使用实时数据库 规则Firebase: