2014-02-11 58 views
0

我在我的User類(從ProtoUser繼承)寫一個函數來引導管理員用戶對我的斯卡拉電梯應用:setPasswordFromListString()不保存密碼

def generateAdminUser():Boolean = { 
    if (User.findAll(By(User.admin, true)).length == 0) { 
    val pw = Props.get("firstadmin.password") openOr "hilariouslybadpassword" 
    val admin = User.create 
        .lastName(Props.get("firstadmin.lastName") openOr "Lady") 
        .firstName(Props.get("firstadmin.firstName") openOr "DeFalt") 
        .email(Props.get("firstadmin.email") openOr "[email protected]") 
        .validated(true) 
        .setPasswordFromListString(pw::Nil) 
        .admin(true) 
        .saveMe 
    } else { 
    false 
    } 
} 

似乎一切都被保存,除了爲密碼。當我看到在數據庫:

id lastname firstname email    locale timezone password_pw password_slt biography validated uniqueid superuser admin_c 
1 Lady  DeFalt  [email protected] en_US US/Pacific *   AE3MQZIX2KUB2ZMR  1 V25VPDIV43BW4HAATP1XMMV152PEWX3L 0 1 

*顯然是錯誤的(通過正常的代碼路徑簽約證明了這一點:它應該是用PW鹽漬哈希),但我沒有得到任何東西我的console.devmode.log,也沒有在我的控制檯上。我試圖以編程方式添加用戶,但我不知道爲什麼這會失敗?對於Scala來說相當新穎,我不確定最好的診斷方法:我儘可能多地遵循代碼路徑,但是在ProtoUser/MegaProtoUser /等迷宮中有點遺失。

回答

1

你有沒有在你的屬性文件中設置firstadmin.password

我沒有用ProtoUser自己,但看代碼 - 在setFromAny方法上PasswordField,它看起來像列表中需要有兩次密碼,以驗證和哈希值。

像這樣的東西可能會有所幫助:

setPasswordFromListString(pw::pw::Nil) 

此外,還有這是5字符密碼的default minimum length。如果validation fails,它似乎默認爲default value

+0

工作正常!密碼在prop文件中設置,但openOr應該已經處理它,如果沒有。它看起來好像更深入的驗證,因此需要兩個pws。謝謝! –

+1

很高興幫助。我詢問在properties文件中設置的密碼的原因主要是爲了查看它是否可能少於5個字符,因爲'hilariouslybadpassword'確實更長。 – jcern