2016-02-22 9 views
6

I crittografare la password dell'utente e salvarla in db. Quindi per il login utente, confrontare la password hash e la password semplice, sto ricevendo l'errore crypto/bcrypt: hashedPassword is not the hash of the given password. Cosa c'è che non va ?crypto/bcrypt: hashedPassword non è l'hash della password specificata

+0

Puoi fornire un esempio del contenuto di 'user.Password' – Danilo

+0

Hai confrontato i byte del DB per assicurarti che venga aggiornato correttamente e non modificato in alcun modo? – JimB

+0

ad esempio, qui è la password hash da db '$ 2a $ 10 $ rqHJJTHTHxMbtX/5ZjG1mFuWyYbUDW1PLbfwQRN0uChwes38c/0m3e', generata da' 123456'. Quindi confronto la password con hash e la password semplice che è '123456' @Danilo @JimB –

risposta

0

Non riesco a stabilire quale sia, ma nella funzione di confronto, assicurarsi di avere le variabili nel posto giusto.

bcrypt.CompareHashAndPassword([]byte(user.Password), []byte(password)) 
      Must be the already hashed PW^   ^Plain Text Password to compare 

Assicurarsi inoltre si sta effettivamente ottenere qualcosa di hash, si potrebbero ottenere una password vuota, ma non rendersene conto, perché l'hash sarà ancora guardare piena.

+0

'user.Password' deriva da db, quindi è già una password con hash. –

+0

@MelihMucuk sei sicuro che stia colpendo la cosa giusta? Hai provato a registrare qual è il valore prima di ottenere l'hash? – Datsik

3

mia scommessa è che user.Password è vuoto nella funzione Register prima di passare a encryptPassword determinando in tal modo gli hash sulla password vuote come quella che hai fornito ($2a$10$rqHJJTHsxMbtX/5ZjG1mFuWyYbUDW1PLbfwQRN0uChwes38c/0m3e).

+0

Sì, puoi verificarlo facilmente con 'fmt.Println (bcrypt.CompareHashAndPassword ([] byte (" $ 2a $ 10 $ rqHJJTHsxMbtX/5ZjG1mFuWyYbUDW1PLbfwQRN0uChwes38c/0m3e "), [] byte {}))' che stampa solo 'nil'. Dovresti aggiungere un controllo a 'encryptPassword' per assicurarti che ciò non accada. – djd

Problemi correlati