ios - 错误 : An appName, 密码重置和电子邮件验证功能需要 publicServerURL 和 emailAdapter

标签 ios swift parse-server pfuser parse-ios-sdk

我有一个用 Swift 编写的 iOS 移动应用程序。我正在使用 Parse Server 作为我的后端,并且正在尝试实现密码重置。该文档仅建议添加我在下面完成的代码。

PFUser.requestPasswordResetForEmailInBackground("<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="6c09010d05002c09140d011c0009420f0301" rel="noreferrer noopener nofollow">[email protected]</a>")

但是,我收到错误密码重置和电子邮件验证功能需要 appName、publicServerURL 和 emailAdapter。我找到了很多关于使用解析来实现 Mailgun 的 Material ,但它们都是用 Javascript 编写的。我必须在 Swift 中实现 Mailgun 吗?如果是这样,我该怎么做?

最佳答案

您不必在 Swift 中实现 Mailgun,您在客户端只需要 requestPasswordResetForEmailInBackGround() 即可。

您找到的示例采用 JavaScript,因为您需要在 Parse Server 初始化中配置密码重置,如 documentation 中所述。 :

var server = ParseServer({
  ...otherOptions,
  // Enable email verification
  verifyUserEmails: true,

  // if `verifyUserEmails` is `true` and
  //     if `emailVerifyTokenValidityDuration` is `undefined` then
  //        email verify token never expires
  //     else
  //        email verify token expires after `emailVerifyTokenValidityDuration`
  //
  // `emailVerifyTokenValidityDuration` defaults to `undefined`
  //
  // email verify token below expires in 2 hours (= 2 * 60 * 60 == 7200 seconds)
  emailVerifyTokenValidityDuration: 2 * 60 * 60, // in seconds (2 hours = 7200 seconds)

  // set preventLoginWithUnverifiedEmail to false to allow user to login without verifying their email
  // set preventLoginWithUnverifiedEmail to true to prevent user from login if their email is not verified
  preventLoginWithUnverifiedEmail: false, // defaults to false

  // The public URL of your app.
  // This will appear in the link that is used to verify email addresses and reset passwords.
  // Set the mount path as it is in serverURL
  publicServerURL: 'https://example.com/parse',
  // Your apps name. This will appear in the subject and body of the emails that are sent.
  appName: 'Parse App',
  // The email adapter
  emailAdapter: {
    module: '@parse/simple-mailgun-adapter',
    options: {
      // The address that your emails come from
      fromAddress: '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="89f9e8fbfaecc9ecf1e8e4f9e5eca7eae6e4" rel="noreferrer noopener nofollow">[email protected]</a>',
      // Your domain from mailgun.com
      domain: 'example.com',
      // Your API key from mailgun.com
      apiKey: 'key-mykey',
    }
  },

  // account lockout policy setting (OPTIONAL) - defaults to undefined
  // if the account lockout policy is set and there are more than `threshold` number of failed login attempts then the `login` api call returns error code `Parse.Error.OBJECT_NOT_FOUND` with error message `Your account is locked due to multiple failed login attempts. Please try again after <duration> minute(s)`. After `duration` minutes of no login attempts, the application will allow the user to try login again.
  accountLockout: {
    duration: 5, // duration policy setting determines the number of minutes that a locked-out account remains locked out before automatically becoming unlocked. Set it to a value greater than 0 and less than 100000.
    threshold: 3, // threshold policy setting determines the number of failed sign-in attempts that will cause a user account to be locked. Set it to an integer value greater than 0 and less than 1000.
  },
  // optional settings to enforce password policies
  passwordPolicy: {
    // Two optional settings to enforce strong passwords. Either one or both can be specified. 
    // If both are specified, both checks must pass to accept the password
    // 1. a RegExp object or a regex string representing the pattern to enforce 
    validatorPattern: /^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.{8,})/, // enforce password with at least 8 char with at least 1 lower case, 1 upper case and 1 digit
    // 2. a callback function to be invoked to validate the password
    validatorCallback: (password) => { return validatePassword(password) }, 
    validationError: 'Password must contain at least 1 digit.' // optional error message to be sent instead of the default "Password does not meet the Password Policy requirements." message.
    doNotAllowUsername: true, // optional setting to disallow username in passwords
    maxPasswordAge: 90, // optional setting in days for password expiry. Login fails if user does not reset the password within this period after signup/last reset. 
    maxPasswordHistory: 5, // optional setting to prevent reuse of previous n passwords. Maximum value that can be specified is 20. Not specifying it or specifying 0 will not enforce history.
    //optional setting to set a validity duration for password reset links (in seconds)
    resetTokenValidityDuration: 24*60*60, // expire after 24 hours
  }
});

关于ios - 错误 : An appName, 密码重置和电子邮件验证功能需要 publicServerURL 和 emailAdapter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54689452/

相关文章:

ios - 从 git 中删除 .xcuserstate 和 DS_Store 文件

swift - 如何从成功登录到第二页 - "warning attempt to present on while a presentation is in progress"错误

javascript - Nuxt.js POST 到 asyncData 内的解析服务器会导致跨域错误

ios - 使用打开的 CV 使用 iPhone 应用程序查找白球

ios - 你能从 iphone 应用程序下载 PDF 格式的东西吗

ios - 滚动后 TableView 颜色重置

更改 google、gmail 密码时 iOS Google SDK 失败

objective-c - 如何NSNumber? == nil 在 Objective-C 中在运行时提交?

node.js - 如何使用 PM2 和 Nginx 来使用多个解析应用程序

parse-platform - 如何使用 New Relic 跟踪 Parse Server 的类名?