【发布时间】:2017-07-12 21:20:12
【问题描述】:
我不确定我是否只是没有看到它,或者它不明显,但有没有适用于 Javascript SDK 或 REST API 的方法strong> 的 Parse 将验证电子邮件重新发送到已注册但由于某种原因未收到电子邮件的特定用户名/电子邮件?
【问题讨论】:
标签: parse-platform parse-server
我不确定我是否只是没有看到它,或者它不明显,但有没有适用于 Javascript SDK 或 REST API 的方法strong> 的 Parse 将验证电子邮件重新发送到已注册但由于某种原因未收到电子邮件的特定用户名/电子邮件?
【问题讨论】:
标签: parse-platform parse-server
几年前我遇到过这个问题,据我所知,没有办法直接通过 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
对于仍在研究此问题的任何人。我正在使用此代码让服务器重新发送电子邮件验证。
我将以下代码作为名为 verifyEmailRequest 的函数放置在我的 User 类中,但您可以将其放置在需要获取所需电子邮件地址的任何位置。
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 尚未实现此功能的任何原因。
【讨论】: