[英]Parse - Resend Email Verification
因此,我希望能夠根據用戶在UITextField中輸入的電子郵件地址重新發送電子郵件驗證,並構建電子郵件地址是否已經過驗證。 現在我知道我需要“重新保存”電子郵件地址以便解析發送電子郵件。 然而,當我在數據庫中查找電子郵件地址時,它一直說它找不到它,電子郵件地址肯定存在且未經驗證。
-(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];
}
}];
}
}];
}
[求助]如果您只是使用相同的電子郵件再次設置用戶的電子郵件,Parse將不會觸發重新發送驗證郵件的過程。 您必須先設置假電子郵件 - >保存 - >設置正確的電子郵件 - >保存。 現在Parse注意到實際的更改,並觸發驗證電子郵件過程。
更改電子郵件的大小寫。
BOOL upperCase = [[NSCharacterSet uppercaseLetterCharacterSet] characterIsMember:[currentUser.email characterAtIndex:0]];
if (upperCase) {
[currentUser setEmail:[currentUser.email lowercaseString]];
}else {
[currentUser setEmail:[currentUser.email capitalizedString]];
}
[currentUser saveEventually];
要訪問用戶信息,您需要使用Parse
定義的PFUser
對象。
PFUser *user = [PFUser user];
PFUser
具有獲取電子郵件地址和檢查電子郵件是否已經過驗證的功能。
我想知道的是如何重新發送電子郵件驗證? 這不是PFUser
對象中定義的過程。
純粹作為測試:讓Parse.com向用戶發送新的驗證電子郵件:
let email = PFUser.currentUser()?.email
PFUser.currentUser()?.email = "temp@temp.com"
PFUser.currentUser()?.saveInBackground()
PFUser.currentUser()?.email = email
PFUser.currentUser()?.saveInBackground()
這種解決方案很脆弱。 很多方面。
如果Parse.com在設置臨時電子郵件地址后但在將其重置為正確的電子郵件地址之前失敗,那么當用戶下次嘗試登錄時,該帳戶將丟失給用戶。
如果#1發生,那么您(以及您的客戶服務)也不會知道正確的電子郵件地址。
如果#1發生,使用此功能的其他用戶會發生什么? 他們的帳戶電子郵件字段可以暫時設置為“temp@temp.com”嗎? 答:不,不能。 saveInBackground()將失敗,因此不會發生電子郵件更改,因此不會發送任何驗證電子郵件。
如果多個用戶嘗試在同一時間段內收到新的驗證電子郵件,那么當第二個帳戶嘗試將電子郵件地址字段設置為“temp@temp.com”時會發生什么? 根據#3,我會說#fail。
如果Parse.com更改了實現,代碼可以生成兩個驗證電子郵件嗎? 每個.saveInBackground()一個。 實際上,Parse會為每個saveInBackground發送一封電子郵件。
我不能為所有這些點編碼,但這里有一些想法:
保存“temp@temp.com”時,還可以將用戶輸入的電子郵件地址保存在另一個字段中以供恢復功能使用。 恢復功能可以手動啟動或定期運行,以便在任何“失敗”后進行清理。
而不是“temp@temp.com”使用隨機生成的電子郵件地址來減輕用戶之間的沖突。
發送新的驗證電子郵件會使早期的電子郵件無效(即早期電子郵件中的“驗證”超鏈接,點擊后會告訴用戶驗證失敗)。
如果您跳過設置並將用戶電子郵件保存為臨時值的兩行,則Parse.com不會發送任何驗證電子郵件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.