【问题标题】:RavenDB and email based document idRavenDB 和基于电子邮件的文档 ID
【发布时间】:2012-12-04 16:22:19
【问题描述】:

我正在关注 RavenDB Oauth 的示例,这里的标准做法似乎是使用用户名来生成 id 密钥。这将要求用户在注册和登录期间输入用户名。

我希望必须基于电子邮件而不是用户名进行身份验证,但是我遇到了困难,试图弄清楚如何正确实施它。

我已经按如下方式实现了 Oauth

 using (IDocumentSession Session = DataDocumentStore.Instance.OpenSession())
            {
                Session.Store(new AuthenticationUser
                {
                    Name = Email,
                    Id = String.Format("Raven/Users/{0}", Email),
                    AllowedDatabases = new[] { "*" }
                }.SetPassword(Password));
                Session.SaveChanges();

                return Session.Load(String.Format("Raven/Users/{0}", Email));
            }

这将允许我们使用以下内容对用户进行身份验证(假设电子邮件和密码是为登录提供的唯一数据)

 using (IDocumentSession Session = DataDocumentStore.Instance.OpenSession())
            {
                return Session.Load(String.Format("Raven/Users/{0}", Email)).ValidatePassword(Password);
            }

我发现的问题是,如果我使用电子邮件作为文档 ID 键并且电子邮件更改,则文档 ID 和引用该 ID 的任何文档都需要更改。

但是,如果我使用 RavenDB 生成的 id(即使电子邮件更改也会保持静态),我无法调用 Session.Load 并且必须改用 Session.Query,如果我正确理解了文档,则没有优化.

所以问题是,以前有没有人遇到过这个问题,(如果有的话)你能提供一个关于我如何做到这一点的建议吗?

【问题讨论】:

    标签: email oauth document ravendb


    【解决方案1】:

    如果电子邮件可以更改,则不能将其用作 id。 您需要先通过 id 进行查询,然后使用从查询中获得的 id 进行其余的操作

    【讨论】:

    • 我可能是错的,但这不是完成任务的非最佳方式吗?即使调用在同一个会话中,它仍然会访问文档数据库两次,对吗?
    猜你喜欢
    • 2011-06-11
    • 2011-03-11
    • 1970-01-01
    • 1970-01-01
    • 2021-01-17
    • 1970-01-01
    • 2020-10-28
    • 2015-03-23
    • 1970-01-01
    相关资源
    最近更新 更多