Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Email RavenDB和基于电子邮件的文档id_Email_Oauth_Document_Ravendb - Fatal编程技术网

Email RavenDB和基于电子邮件的文档id

Email RavenDB和基于电子邮件的文档id,email,oauth,document,ravendb,Email,Oauth,Document,Ravendb,我遵循RavendbOAuth的示例,这里的标准做法似乎是使用用户名生成id密钥。这需要用户在注册和登录期间输入用户名 我希望必须基于电子邮件而不是用户名进行身份验证,但是我遇到了一堵墙,试图找出如何正确实现它 我实现了Oauth,如下所示 using (IDocumentSession Session = DataDocumentStore.Instance.OpenSession()) { Session.Store(new Auth

我遵循RavendbOAuth的示例,这里的标准做法似乎是使用用户名生成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));
            }
这将允许我们使用以下内容对用户进行身份验证(考虑到电子邮件和密码是登录时提供的唯一数据)

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

但是,如果我使用RavenDB生成的id(即使电子邮件发生更改,该id也将保持静态),我无法调用
会话。加载
,而必须使用
会话。查询
,如果我正确理解文档,这将不会得到优化


所以问题是,以前有没有人遇到过这个问题,如果有,你能给我一个建议,让我如何做到这一点吗?

如果电子邮件可以更改,你不能将其用作id。
您需要首先根据id执行查询,然后使用从查询中获得的id执行其余的查询

我可能错了,但这不是完成任务的最佳方式吗?即使调用在同一个会话中,它仍然会两次命中文档数据库,对吗?
 using (IDocumentSession Session = DataDocumentStore.Instance.OpenSession())
            {
                return Session.Load(String.Format("Raven/Users/{0}", Email)).ValidatePassword(Password);
            }