0

我想獲取一些參數並使用它們重置firebase中的密碼功能。獲取參數並將它們存儲並用於我的方法中使用的變量

這是我的鏈接看起來像: http://localhost:8080/passwordreset?mode=resetPassword&oobCode=y6FIOAtRUKYf88Rt5OlEwxUuTyEmb3M4gquZSIseX2UAAAFevpj-gw&apiKey=AIzaSyBaCCvq-ZEfQmdrL7fmElXDjZF_J-tku2I

我想modeoobCodeapiKey。 這裏是我現在:

export default { 


data: function() { 
    return { 
     passwordNew: '', 
     passwordConfirm: '', 
     mode:'', 
     actionCode: '', 
     continueUrl: '', 
    } 
}, 
methods: { 
    handleResetPassword: function() { 
     var accountEmail; 

     firebase.auth().verifyPasswordResetCode(actionCode).then(function(email) { 
      var accountEmail = email; 
      firebase.auth().confirmPasswordReset(this.actionCode, this.passwordNew).then(function(resp) { 

       alert("Password reset success"); 
       this.$router.push('hello') 
      }).catch(function(error) { 
       // Error occurred during confirmation. The code might have expired or the 
       // password is too weak. 
       console.log("error 1") 
      }); 
     }).catch(function(error) { 
      // Invalid or expired action code. Ask user to try to reset the password 
      // again. 
      console.log("error 2") 
     }); 
    }, 
} 

} 
+1

的可能的複製[?如何訪問正確的\'這\'回調內(https://stackoverflow.com/questions/20279484/how-to -access-the-correct-this-inside-a-callback) – Bert

+0

謝謝@Bert的幫助,但我不認爲這是重複的 – Muli

+0

至少有一部分,上面的代碼不起作用。你不能訪問你的數據屬性,因爲你在'then'回調函數中使用了'function(){}'。您應該使用箭頭函數,閉包或綁定。 – Bert

回答

1

從火力地堡文檔:

一些用戶管理操作,如更新用戶的電子郵件地址 和重置用戶的密碼,導致被髮送的電子郵件到 用戶。這些電子郵件包含收件人可以打開以完成 或取消用戶管理操作的鏈接。默認情況下,用戶管理 電子郵件鏈接到默認操作處理程序,該處理程序是您項目的Firebase託管域中的URL託管的網頁 。

鏈接:https://firebase.google.com/docs/auth/custom-email-handler

你需要得到這些參數,並將它們存儲在變量,從火力文檔我得到了那些片段,只是寫了getParameterByName功能:

function getParameterByName(name){ 
    name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]"); 
    var regexS = "[\\?&]"+name+"=([^&#]*)"; 
    var regex = new RegExp(regexS); 
    var results = regex.exec(window.location.href); 
    if(results == null) 
    return ""; 
    else 
    return decodeURIComponent(results[1].replace(/\+/g, " ")); 
} 
    // Get the action to complete. 
    var mode = getParameterByName('mode'); 
    // Get the one-time code from the query parameter. 
    var actionCode = getParameterByName('oobCode'); 
    // (Optional) Get the continue URL from the query parameter if available. 
    var continueUrl = getParameterByName('continueUrl'); 

你需要得到這些參數首先驗證verifyPasswordResetCode方法上的actioncode,然後您可以更改密碼並將其與操作代碼一起存儲到方法中。

在您的出口默認:

data: function() { 
     return { 
      passwordNew: '', 
      passwordConfirm: '', 
      mode: mode, 
      actionCode: actionCode, 
      continueUrl: continueUrl, 
     } 
    }, 
    methods: { 
     handleResetPassword: function() { 
      var passwordNew = this.passwordNew 
      var actionCode = this.actionCode 
      firebase.auth().verifyPasswordResetCode(actionCode).then(function(email) { 
       console.log("ActionCode: "+ actionCode); 

       firebase.auth().confirmPasswordReset(actionCode, passwordNew).then(function(resp) { 

        alert("Password reset success"); 
        this.$router.push('hello') 
       }).catch(function(error) { 
        console.log("error 1"+ error) 
       }); 
      }).catch(function(error) { 
       console.log("Action code is invalid"+ error) 
      }); 

     }, 
    } 
+0

謝謝,這有助於:D – Muli

相關問題