使用 Swift Parse Server 和 AWS SES 请求重置电子邮件的密码

Posted

技术标签:

【中文标题】使用 Swift Parse Server 和 AWS SES 请求重置电子邮件的密码【英文标题】:Request Password Reset for Email using Swift Parse Server and AWS SES 【发布时间】:2018-12-12 05:59:43 【问题描述】:

我让 AWS SES 使用 Parse 服务器使用

$ npm install parse-server-amazon-ses-email-adapter --save

更改 server.js 并设置 verifyUserEmails: true 后,我能够发送验证用户电子邮件并单击将其设置为 true。

然后,我添加了用于重置密码的 swift 代码,并受到鼓励,当我 输入了不是它认识的用户的电子邮件并返回了错误。当我没有错误地输入有效用户时,也没有电子邮件......

PFUser.requestPasswordResetForEmail(inBackground: userName.text!)  (success: Bool, error: Error?) in
    if success 
        let alert = UIAlertController(title: "Success", message: "Please check your email and follow the instructions", preferredStyle: UIAlertControllerStyle.alert)
        let ok = UIAlertAction(title: "Ok", style: UIAlertActionStyle.default, handler:  (UIAlertAction) in
            self.dismiss(animated: true, completion: nil)
        )
        alert.addAction(ok)

        self.present(alert, animated: true, completion: nil)
    
    else 
        print(error?.localizedDescription ?? "")
    

我是否可能遗漏了需要在 server.js 中添加的内容?我在正确的位置有 html 和文本模板,就像验证用户一样。我在网上搜索了可能有类似 verifyUserEmails 设置的东西,但我不知道是什么打开了该功能。任何人都可以帮忙吗?如果我不能让它工作,我将不得不用 mailgun 重新开始。

这是我的 server.js 供参考:

var api = new ParseServer(
    databaseURI: process.env.MONGODB_URI,
    cloud: "./node_modules/parse-server/lib/cloud-code/Parse.Cloud.js",
    appId: "c4f3ec***************",
    masterKey: process.env.MASTER_KEY,
    publicServerURL: process.env.SERVER_URL,
    verifyUserEmails: true,
    appName: process.env.APPNAME,
    emailVerifyTokenValidityDuration: 2 * 60 * 60, // in seconds (2 hours = 7200 seconds)
    filesAdapter: 
        "module": "@parse/s3-files-adapter",
        "options": 
            "bucket": process.env.S3_BUCKET,
        
    ,
    emailAdapter: new AWSEmailAdapter(
        // The address that your emails come from
        fromAddress: process.env.EMAIL_FROM_ADDRESS,
        accessKeyId: process.env.AWS_ACCESS_KEY_ID,
        secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
        region: 'us-east-1',
        // The template section
        templates: 
            passwordResetEmail: 
                subject: 'Reset your password',
                pathPlainText: resolve(__dirname, './email_templates/password_reset_email.txt'),
                pathHtml: resolve(__dirname, './email_templates/password_reset_email.html'),
                callback: (user) => 
                    return 
                        firstName: user.get('firstName')
                    
                
                // Now you can use firstName in your templates
            ,
            verificationEmail: 
                subject: 'Confirm your account',
                pathPlainText: resolve(__dirname, './templates/verification_email.txt'),
                pathHtml: resolve(__dirname, './templates/verification_email.html'),
                callback: (user) => 
                    return 
                        firstName: user.get('firstName')
                    
                
                // Now you can use firstName in your templates
            ,
        
    ),
    serverURL: process.env.SERVER_URL
);

【问题讨论】:

【参考方案1】:

天哪,我只是想删除这个问题,因为解决方案太尴尬了,但我决定在这里回答,以防其他人有类似的问题,而我的代码 sn-p(和错误)会很有启发性.

在我上面包含的 server.js 中,大部分内容实际上都已正确设置。验证电子邮件发出而重置密码没有发出的原因是因为我更改了电子邮件模板的路径,并且在验证时只有正确的一个(./templates 与 ./email_templates)。简而言之,我更正了该路径,将更改保存到 server.js,然后运行 ​​pm2 restart 0 重新启动服务器,瞧,密码正在重置!

【讨论】:

以上是关于使用 Swift Parse Server 和 AWS SES 请求重置电子邮件的密码的主要内容,如果未能解决你的问题,请参考以下文章

使用 Swift 3 和 iOS 在发送到 Parse Server 的 authdata 对象中使用来自 google 登录的哪个 authdata

使用 Swift 3 上传和图像到 Parse Server 失败:“JSON 文本不是以数组或对象开头”

Swift 3 上传图片到 Parse Server

使用 Swift 在 Parse Server 中触发

Parse Server Swift Logic 用于抓取数组中包含的所有项目

在 Parse Server 中向我的数组添加唯一值(swift 3)