2015-12-21 167 views
1

我试图执行自定义电子邮件验证用户注册。默认的仅发送纯文本消息,但我们希望发送HTML格式的消息。自定义电子邮件验证 - 无法设置电子邮件验证

目前的方法:

  1. 使用云代码,Parse.Cloud.beforeSave("Parse.User"…设置在用户的“confirmationToken”字段中输入生成的令牌
  2. 同样的功能将使用MailChimpMandrill Cloud Module服务格式的电子邮件功能给用户,包括确认链接confirmationToken这样http://www.our-website.com/confirm_email.php?confirmationToken=confirmationToken
  3. 用户点击链接,我们的网站得到令牌th粗糙的HTTP GET请求
  4. 网站运行Parse PHP SDK和查询用户数据库,以获得与confirmationToken字段的值,如果发现用户从请求
  5. 令牌相匹配的用户,我们尝试设置emailVerifiedtrue ...

现在是问题所在。 emailVerified字段似乎受到保护。试图设置它会给你一个ParseException'InvalidKeyName'()。现在,我可以使用另一个字段,但问题是我们之前已经设置了默认的Parse电子邮件验证,并且我们的应用正在寻找emailVerified中的该值。用户已经使用默认的电子邮件验证进行注册,并且我们不能仅仅因为部署了应用程序而改变它。

有没有什么办法可以设置emailVerified字段? 任何人都可以想到一个解决方案,它也适用于已经在检查这个字段的应用程序,尽管将来我们不得不设置另一个应用程序。 如果您禁用电子邮件验证(现在仍然启用),该字段是否仍然受到保护?

任何帮助,非常感谢。

回答

1

不幸的是,即使使用主密钥,也不能设置emailVerified属性。唯一的选择是创建一个自定义验证属性以与定制验证逻辑一起使用。

我会带会是这样的方法:

  1. 构建和测试新的方案,使用新的领域
  2. 运行用于填充新属性的迁移用户的emailVerified
  3. 调用同样的逻辑afterSave任何Parse.User
  4. 修改客户机来检查新的属性

我意识到第4步违反了这个问题的前提,但是您的应用程序必须在客户可以修改的前提下进行设计。如果不是这个问题,那将是另一回事。经营条件将改变,您的客户也必须改变。

+0

出于好奇:什么最好的方法来设计一个可以修改的客户端? 现在我要么破坏现有用户注册的应用程序,要么我必须为新用户发送两次验证电子邮件。我想我应该添加一些Parse Class来启用或禁用与其版本相关的应用中的功能? –

+0

您可以用一个通过新流程注册的客户来替换客户吗?它是什么样的客户? – danh

+0

这是一个原生的iPhone和Android应用程序,所以我只是想知道如何保持兼容性,当人们不会同时更新应用程序。我甚至无法在旧应用的注册过程中向我的用户提供错误消息。我只是希望你能给我一些更具体的设计策略,正如你所说的,你的应用程序必须在客户可以并将被修改的前提下设计。 –

2

我只想补充一点,我们已经在60天前在Parse上部署了一个应用程序,平均每周有2,000位新用户需要进行电子邮件验证。我们的用户主要是政府(很多.gov)。我们每天花费几个小时在Zendesk处理未收到验证链接的用户的支持服务。支持正在粉碎我们。

我意识到了锁定字段的意图,但是如果我从用户那里收到一封电子邮件,那对我来说已经足够验证了,这将为我们节省很多时间来将emailVerified切换为true。

请重新考虑让开发人员自行作出此决定。

+0

+1我们的自定义解决方案的工作方式可能与默认的parse.com相同。如果他们有HTML电子邮件,我们甚至不需要这样做。顺便说一句,我认为你可以在数据库中手动设置emailVerified字段。 –

+0

@JulianVogels不幸的是你不能。当您尝试切换'emailVerified'真/假解析引发错误:“用户无法设置emailVerified字段” –

+0

是的,您是对的,它不会更新。您可以切换它,甚至可以设置值...我一开始没有注意到底部的警报。 –