2015-05-18 39 views
1

我想在註冊或成功更改之前驗證用戶密碼。例如,我想強制用戶在他/她的密碼中至少有6個字符。在註冊或編輯之前驗證用戶密碼

Parse.Cloud.beforeSave(Parse.User, function (request, response) { 

    var user = request.object; 

    Parse.Cloud.useMasterKey(); 

    if (user.isNew() || user.dirty("password")) { 

    var regex = /^(.{6,})$/; //at least six characters 

    if (!regex.test(user.get("password"))) { 
     response.error("Password does not fit the requirements"); 
     return; 
    } 
    } 

    if ((user.isNew() || user.dirty("email")) && !user.getEmail()) { 
    response.error("Email is empty"); 
    return; 
    } 

    response.success(); 

}); 

因此,即使使用主密鑰,我也無法驗證密碼。 更新:電話user.get("password")一直返回undefined

解決方法之一是創建一個雲功能來驗證密碼,然後在調用註冊之前由客戶端驗證密碼。我想把它放在beforeSaveParse.User

+1

這個問題並不指出什麼是不工作的。 – danh

+0

感謝@danh的領導。問題正確更新。 –

回答

0

編輯對發現問題非常有幫助。 user.get("password")將返回用戶的密碼,但Parse.User對象提供用戶名,密碼和電子郵件的特殊方法。替換爲user.password

See the doc here.

+0

我想這些參數對客戶而不是雲代碼更有用。但是,'user.password'返回'undefined'。如果我不得不猜測我會說這是出於安全原因。 –

+0

是的 - 在註冊之前,我的代碼在客戶端執行了類似的操作,並且可能在saveSave觸發之前密碼混淆已經完成。您可以在註冊之前將密碼測試移到客戶端。另外,我認爲空的電子郵件是通過解析找到的。 – danh

+0

關於電子郵件,它沒有。如果我提供了一封無效的電子郵件,它會引發錯誤,但如果它變空,它將被記錄爲空。 關於密碼,我的目標是在服務器上進行驗證,以便客戶端被強制執行。 –