使用 Parse 重新发送电子邮件验证

Re-sending email verification with Parse

我不确定我是否只是没有看到它或者它不明显但是有没有办法 Javascript SDK 或 Parse 的 REST API 将验证电子邮件重新发送到特定的 username/email,该 username/email 已注册但由于某种原因未收到电子邮件?

几年前我遇到过这个问题,据我所知,没有办法直接通过 Parse SDK 重新发送验证邮件。当首先填充或更新电子邮件字段时,将自动触发电子邮件验证。

作为解决方法,我实现了一个云函数来覆盖电子邮件字段以触发重新发送。该函数将原始电子邮件地址值存储在一个临时变量中,然后用随机生成的有效电子邮件地址替换电子邮件字段,然后立即用原始电子邮件地址重新填充它。这用于触发从 Parse 服务器重新发送电子邮件。

代码是这样的:

    var user  = request.user;
    var email = user.get("Email");
    var randomMail = "objectID@domain.com"; //// random but valid Email address
    user.set("email", randomMail); /// Populate the field

    user.save(null, { useMasterKey: true }).then( function(user) {

        // The field was updated, recover the original Email address again
        user.set("email", email);
        return user.save(null, { useMasterKey: true });

    }).then( function(user) {

        response.success();

    }, function(error) {

        response.error(error);
    });

Swift 5 和 iOS

对于仍在调查此问题的任何人。我正在使用此代码让服务器重新发送电子邮件验证。

我将以下代码作为名为 verificationEmailRequest 的函数放在我的用户 class 中,但您可以将它放在任何需要获取所需电子邮件地址的地方。

   let json: [String: Any] = ["email": "<email address here>"]
   let jsonData = try? JSONSerialization.data(withJSONObject: json)
    
   // create post request
   let url = URL(string: "\(Parse.currentConfiguration?.server ?? "")verificationEmailRequest")! //PUT Your URL
   var request = URLRequest(url: url)
   request.httpMethod = "POST"
   request.setValue("\(String(describing: jsonData?.count))", forHTTPHeaderField: "Content-Length")
   request.setValue("application/json", forHTTPHeaderField: "Content-Type")
   request.setValue(Parse.currentConfiguration?.applicationId, forHTTPHeaderField: "X-Parse-Application-Id")
   request.setValue(Parse.currentConfiguration?.clientKey, forHTTPHeaderField: "X-Parse-Client-Key")
   // insert json data to the request
   request.httpBody = jsonData
    
   let task = URLSession.shared.dataTask(with: request) { data, response, error in
    guard let data = data, error == nil else {
        print("error here: \(error?.localizedDescription ?? "No data")")
        return
    }
    
    let responseJSON = try? JSONSerialization.jsonObject(with: data, options: [])
    if let responseJSON = responseJSON as? [String: Any] {
        print("successful response: \(responseJSON)") //Code after Successfull POST Request
        
    }
 }
 
 task.resume()
                    

此代码使用来自发送验证电子邮件的 Parse 服务器的 REST API。 (参见 here

重要的是要注意,我正在使用 Parse.currentConfiguration 进行身份验证,这是免费提供的,无论如何都需要使用 Swift 设置 Parse。一般放在SceneDelegate中。

我目前不知道这样做是否存在安全风险,因为我找不到 Parse 尚未实现此功能的任何原因。