使用 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 尚未实现此功能的任何原因。
我不确定我是否只是没有看到它或者它不明显但是有没有办法 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 尚未实现此功能的任何原因。