如何使ServiceStack不使用相同的电子邮件地址创建多个UserAuth?
我执行以下操作:
这会创建一个新的UserAuth,从而创建一个新用户。是否可以告诉尝试使用Facebook登录的用户是否已存在具有电子邮件地址的帐户?
我研究了子类化FacebookAuthProvider并覆盖了Authenticate,但我还没有访问Facebook的电子邮件。还有其他方法需要覆盖吗? 这里有类似的问题,但看起来并没有得到解决?
Why doesn't ServiceStack always link UserAuth and UserAuthDetails?
答案 0 :(得分:1)
ServiceStack现在验证OAuth提供商返回的电子邮件现在是唯一的in this commit,如果已经存在具有现有电子邮件身份验证的UserAuth,则会失败并使用错误消息令牌重定向(对于HTML / Web浏览器请求):
/#f=EmailAlreadyExists
否则,如果他们已经使用现有的电子邮件进行身份验证,则Facebook身份验证将成功,并且UserAuth帐户将合并在一起。
新的CustomValidationFilter
也被添加到所有AuthProviders中,可用于返回IHttpResult
以控制返回的错误响应,例如:
Plugins.Add(new AuthFeature(
() => new CustomUserSession(),
new IAuthProvider[] {
new FacebookAuthProvider(appSettings) {
CustomValidationFilter = authCtx => CustomIsValid(authCtx)
? authCtx.Service.Redirect(authCtx.Session.ReferrerUrl
.AddHashParam("f","CustomErrorCode"))
: null,
},
}));
此更改可从 v4.0.25 + 获得,现在为available on MyGet。