我正在关注 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
它,如果我正确理解文档,它就没有那么优化。
所以问题是,以前有没有人遇到过这个问题,(如果有的话)你能提供一个关于我如何完成这个问题的建议吗?