【问题标题】:Firebase.resetPassword() password lifetime [duplicate]Firebase.resetPassword() 密码有效期[重复]
【发布时间】:2016-03-05 16:39:31
【问题描述】:

我使用 angularJS 和 firebase 作为后端来创建我的简单网络应用程序。 当调用 .resetPassword() 方法时,会向用户发送一封包含临时密码的电子邮件,以便他可以登录应用程序。 根据以下资源,临时密码的有效期为 24 小时:

https://www.firebase.com/docs/web/api/firebase/resetpassword.html

所以,我有一个问题 - 临时密码过期后会发生什么?是不是直接丢掉了,旧密码还能用吗?..

提前致谢

【问题讨论】:

  • 是的,有一个解决方法..
  • 密码重置令牌一旦过期,就不能再使用了。据我所知,创建密码重置令牌及其到期都不会对现有密码产生任何影响。
  • @FrankvanPuffelen - 所以,当通过电子邮件发送令牌时,它作为附加密码,而旧密码仍然可以使用,对吧?

标签: angularjs web firebase angularfire


【解决方案1】:

基本上您可以更改用户密码,然后手动将其通过电子邮件发送给他。所以假设他们注册到您的应用程序时,它会按以下顺序排列:

username---
          Username
          Password
          Email
          UID

所以当用户点击 resetPassword 时,你必须生成一个随机密码,然后给他发送一封电子邮件......所以首先让我们处理发送电子邮件:

Mandrill的第一注册

1. register for Mandrill to get an API key
2. load jQuery
3. use $.ajax to send an email

这就是它的布局方式:

function randomPassword(){
    var length = 8,
        charset = "abcdefghijklnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789",
        retVal = "";
    for (var i = 0, n = charset.length; i < length; ++i) {
        retVal += charset.charAt(Math.floor(Math.random() * n));
    }
    return retVal;
}

不要忘记将其添加到您的脚本标签中:

&lt;script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"&gt;&lt;/script&gt;

这样你就可以发送电子邮件了:

还有:

$.ajax({
  type: “POST”,
  url: “https://mandrillapp.com/api/1.0/messages/send.json”,
  data: {
    ‘key’: ‘YOUR API KEY HERE’,
    ‘message’: {
      ‘from_email’: ‘YOUR@EMAIL.HERE’,
      ‘to’: [
          {
            ‘email’: ‘RECIPIENT_NO_1@EMAIL.HERE’,
            ‘name’: ‘RECIPIENT NAME (OPTIONAL)’,
            ‘type’: ‘to’
          },
          {
            ‘email’: ‘RECIPIENT_NO_2@EMAIL.HERE’,
            ‘name’: ‘ANOTHER RECIPIENT NAME (OPTIONAL)’,
            ‘type’: ‘to’
          }
        ],
      ‘autotext’: ‘true’,
      ‘subject’: ‘Password generated’,
      ‘html’: ‘This is your Newly generated password’ + randomPassword
    }
  }
 }).done(function(response) {
   console.log(response);
 });

关于发送电子邮件部分的更多信息here

如果您尝试仅使用 firebase 来执行此操作,那么正如 frank 所说,这是不可能的:How to extend lifetime of password, generated by ref.resetPassword()?

【讨论】:

  • 您只能通过调用changePassword()更改密码,这需要您知道旧/当前密码。所以我认为这不适用。
  • 这确实适用...您是否正确阅读了我的逻辑@FrankvanPuffelen?用户在注册时存储密码并可以像我上面提到的那样使用它。是的,你可以做 changePassword(),并在成功回调中获取密码,但我的只是另一种方式......
  • 您是否建议将密码存储在数据库中(例如在/users/$uid 下)?在这种情况下,流程可以工作。但我不建议将用户的密码存储在您的数据库中。使用 Firebase 身份验证的原因之一是您不必负责存储用户的密码。
  • 这就是我说的是的.. 你的权利.. 你可以向用户询问密码,然后通过 checkPassword(); 来检查它是否正确; ,那么你就可以得到他要改成的新密码,然后按照上面的建议进行@FrankvanPuffelen
  • 感谢@Dsafds 提供如此详细的回复 :) 但是,我不需要为我的应用程序实现任何附加功能,只是想了解令牌过期时会发生什么。在数据库中存储数据实际上似乎是一种不太安全的方法。无论如何都干杯!
猜你喜欢
  • 2016-01-22
  • 2020-03-30
  • 1970-01-01
  • 2013-07-24
  • 2014-07-12
  • 2013-03-30
  • 2013-01-15
  • 2019-12-26
  • 2013-04-24
相关资源
最近更新 更多