解析 - 重新发送电子邮件验证

时间:2014-07-18 11:21:37

标签: ios objective-c xcode email parse-platform

所以我希望能够根据用户在UITextField中输入的电子邮件地址重新发送电子邮件验证,并构建电子邮件地址是否已经过验证。现在我知道我需要" resave"解析发送电子邮件的电子邮件地址。但是,当我在数据库中查找电子邮件地址时,它一直说它找不到它,电子邮件地址肯定存在且未经验证。

-(IBAction)emailVerification:(id)sender{
PFQuery *query = [PFQuery queryWithClassName:@"User"];
[query whereKey:@"email" equalTo:self.email.text];
[query whereKey:@"emailVerified" equalTo:false];
[query getFirstObjectInBackgroundWithBlock:^(PFObject *object, NSError *error) {
    if (!object) {
        NSLog(@"The getFirstObject request failed.");
        //Failed, incorrect email address
        UIAlertView *alert=[[UIAlertView alloc] initWithTitle:@"Error" message:@"Check your internet connection and/or the email address"delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil,nil];
        [alert show];
    }
    else {
        //found email address check verified
        NSLog(@"Successfully retrieved the object.");
        [query whereKey:@"emailVerified" equalTo:false];
        [query getFirstObjectInBackgroundWithBlock:^(PFObject *object, NSError *error) {
            if (!object) {
                // The find succeeded.
                object[@"email"]=self.email.text;
                [object saveInBackground];

            }
            else {
                UIAlertView *alert=[[UIAlertView alloc] initWithTitle:@"Error" message:@"Already Verified!"delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil,nil];
                [alert show];
            }
        }];
    }


   }];
}

4 个答案:

答案 0 :(得分:1)

[求助]如果您只是使用相同的电子邮件再次设置用户的电子邮件,Parse将不会触发重新发送验证邮件的过程。 您必须先设置假电子邮件 - >保存 - >设置正确的电子邮件 - >保存。 现在,Parse会注意到实际的更改并触发验证电子邮件过程。

答案 1 :(得分:1)

更改电子邮件的大小写。

BOOL upperCase = [[NSCharacterSet uppercaseLetterCharacterSet] characterIsMember:[currentUser.email characterAtIndex:0]];

if (upperCase) {
   [currentUser setEmail:[currentUser.email lowercaseString]];
}else {
   [currentUser setEmail:[currentUser.email capitalizedString]];
}
[currentUser saveEventually];

答案 2 :(得分:0)

要访问用户信息,您需要使用PFUser中定义的Parse对象。

PFUser *user = [PFUser user];

PFUser具有获取电子邮件地址和检查电子邮件是否已经过验证的功能。

我想知道的是如何重新发送电子邮件验证?这不是PFUser对象中定义的过程。

答案 3 :(得分:0)

纯粹作为测试:让Parse.com向用户发送新的验证电子邮件:

let email = PFUser.currentUser()?.email
PFUser.currentUser()?.email = "temp@temp.com"
PFUser.currentUser()?.saveInBackground()
PFUser.currentUser()?.email = email
PFUser.currentUser()?.saveInBackground()

这种解决方案很脆弱。在很多方面。

  1. 如果Parse.com在设置临时电子邮件地址后但在将其重置为正确的电子邮件地址之前失败,那么当用户下次尝试登录时,该帐户将会丢失。

  2. 如果#1发生,那么您(以及您的客户服务)也不会知道正确的电子邮件地址。

  3. 如果#1发生,使用此功能的其他用户会发生什么?他们的帐户电子邮件字段可以暂时设置为“temp@temp.com”吗?答:不,不能。 saveInBackground()将失败,因此不会发生电子邮件更改,因此不会发送验证电子邮件。

  4. 如果多个用户尝试在同一时间段内收到新的验证电子邮件,那么当第二个帐户尝试将电子邮件地址字段设置为“temp@temp.com”时会发生什么?基于#3我会说#fail。

  5. 如果Parse.com更改了实施,代码会生成两封验证邮件吗?每个.saveInBackground()一个。实际上,Parse会为每个saveInBackground发送一封电子邮件。

  6. 我不能为所有这些点编码,但这里有一些想法:

    1. 保存“temp@temp.com”时,还可以将用户输入的电子邮件地址保存在其他字段中以供恢复功能使用。恢复功能可以手动启动或定期运行,以便在任何“失败”后进行清理。

    2. 而不是“temp@temp.com”使用随机生成的电子邮件地址来缓解用户之间的争吵。

    3. 备注

      1. 发送新的验证邮件会使之前的电子邮件无效(即早期电子邮件中的“验证”超链接,点击后会告诉用户验证失败)。

      2. 如果您跳过设置并将用户电子邮件保存为临时值的两行,则Parse.com不会发送验证电子邮件。