避免ServiceStack使用相同的电子邮件地址创建多个UserAuth

时间:2014-08-01 01:32:48

标签: servicestack

如何使ServiceStack不使用相同的电子邮件地址创建多个UserAuth?

我执行以下操作:

  • 使用凭据(用户+通行证)创建帐户&登录
  • 退出
  • 使用Facebook登录(与凭据中使用的电子邮件地址相同)

这会创建一个新的UserAuth,从而创建一个新用户。是否可以告诉尝试使用Facebook登录的用户是否已存在具有电子邮件地址的帐户?

我研究了子类化FacebookAuthProvider并覆盖了Authenticate,但我还没有访问Facebook的电子邮件。还有其他方法需要覆盖吗? 这里有类似的问题,但看起来并没有得到解决?

Why doesn't ServiceStack always link UserAuth and UserAuthDetails?

1 个答案:

答案 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