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

时间:2018-12-12 05:59:44

标签: swift amazon-web-services parse-server amazon-ses

我让AWS SES使用

与解析服务器一起工作
$ npm install parse-server-amazon-ses-email-adapter --save

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

然后,我添加了用于重置密码的快速代码,并受到鼓励,当我 输入不是用户知道的电子邮件,并返回错误。当我将有效用户设置为没有错误但也没有电子邮件时...

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 个答案:

答案 0 :(得分:0)

我的天哪,我想删除这个问题是因为解决方案太尴尬了,但是我决定在这里回答,以防其他人有类似的问题并且我的代码段(和错误)具有指导意义。 / p>

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