RavenDB和基于电子邮件的文档ID

时间:2012-12-04 02:59:21

标签: email oauth document ravendb

我正在关注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代替,如果我没有优化正确理解文档。

所以问题是,有没有人遇到过这个问题,如果有的话(如果有的话)你能提出一个关于如何实现这个目标的建议吗?

1 个答案:

答案 0 :(得分:1)

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