【问题标题】:how to resend email verification parse.com如何重新发送电子邮件验证 parse.com
【发布时间】:2015-05-12 21:23:45
【问题描述】:

我正在尝试触发重新发送用户验证电子邮件。我读了几篇文章,建议一个简单地将电子邮件地址设置为相同的值并保存用户对象 - 所以我尝试了这样的:

PFUser.currentUser().email = String(PFUser.currentUser().email)
PFUser.currentUser().saveInBackgroundWithBlock {}

这不起作用。它永远不会触发验证电子邮件。有没有更好的办法?可能会发生什么。我可以在保存块中确认非零用户和成功。

【问题讨论】:

  • 要触发验证邮件,需要更改电子邮件字段值。因此,只需先设置一些虚拟电子邮件,然后再设置原始电子邮件。

标签: ios swift parse-platform


【解决方案1】:

您已经发现 Parse 方便的电子邮件验证行为中最粗糙的优势之一 :-) 重新发送电子邮件验证使用通过将电子邮件重置为用户当前地址、保存和验证来工作被发送。目前,此行为不起作用。

只有在服务器上的电子邮件地址发生变化时才会立即发送验证电子邮件,这是一种可怕的行为。这意味着您需要将电子邮件地址设置为其他内容,保存,成功后将其更改回用户的原始电子邮件,然后再次保存。诀窍是第一次更改并保存,会发送一封验证邮件。

我所做的,这很可怕,但这是我发现的唯一不会向临时/无效地址发送随机验证电子邮件的方法,就是清空用户电子邮件,保存,设置它再次,并保存。如果正确地址的设置/保存失败,这会导致中间状态,但这是我找到的唯一解决方法。代码如下。

let user = PFUser.currentUser()
let email = user.email
user.email = ""
user.saveInBackgroundWithBlock { result, error in
  if let e = error {
    // Handle the error
    return
  }
  user.email = email
  user.saveInBackgroundWithBlock {result, error in
    if let e = error {
      // If you have an error here you're screwed, as your user now has a blank email address
      return
    }
  }
}

让用户的电子邮件地址无法恢复的一种方法可能是在用户对象上设置一个“oldEmail”地址字段,然后将其设置为他们的电子邮件,然后将他们的电子邮件设置为“”,然后保存,因此,如果第一次保存成功而第二次保存失败,您可以尝试通过设置 email = oldEmail 来恢复。

【讨论】:

  • 如果出现错误,也许您可​​以使用user.email = email; user.saveEventually(); 作为弹性?
【解决方案2】:

在我的情况下,我将电子邮件的小写字符串版本复制为他们登录时使用的用户名。因此,电子邮件地址的实际大小写无关紧要。由于电子邮件地址的域始终不区分大小写,因此我将翻转它的第一个字符并保存。这可以在没有第二次保存并且没有可能的边缘状态的情况下工作。

// Flip the capitlization of the first letter of the email

// Get the domain separator
NSRange atRange = [user.email rangeOfString:@"@"];

// If we couldn't find it we need to back out
if (atRange.location == NSNotFound) {
    completion(NO, [NSError errorWithDomain:@"com.myapp.error"
                                       code:0
                                   userInfo:@{NSLocalizedDescriptionKey : NSLocalizedString(@"User Has Invalid Email Message", @"User Has Invalid Email Message") } ]);
    return;
}

// Get the flip range and character
NSRange flipRange = NSMakeRange(atRange.location + 1, 1);
NSString *flipChar = [user.email substringWithRange:flipRange];

// Flip the capitlization
flipChar = ([[NSCharacterSet uppercaseLetterCharacterSet] characterIsMember:[flipChar characterAtIndex:0]]) ?
[flipChar lowercaseString] : [flipChar uppercaseString];

// Updated and save
user.email = [user.email stringByReplacingCharactersInRange:flipRange withString:flipChar];
[user saveInBackgroundWithBlock:^(BOOL succeeded, NSError * _Nullable error) {
    if (succeeded) {
        // Handle Success
    }
    else{
        // Handle failure
    }
}];

如果您需要保持大写,您可以随时在云代码挂钩中修复它。

【讨论】:

  • 辉煌的解决方案烟熏牡蛎
猜你喜欢
  • 2017-09-09
  • 1970-01-01
  • 1970-01-01
  • 2016-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-07
  • 2015-10-13
相关资源
最近更新 更多