Ripristina password con file ruby personalizzato

Funzione personalizzata per l’aggiornamento della password in Discourse

Possiamo usare questo codice per aggiornare la password?

es:-
User.find_by(username: ‘gollum’).update!(password: ‘shiiiire!-BAGGINS!’)

Oppure

Possiamo creare un plugin personalizzato e utilizzare un endpoint personalizzato come API
e creare un token con le credenziali dell’utente quindi reimpostare la password con l’API.

Per favore condividi il modo migliore per fare questo lavoro

Ciao Hitesh,

Quale sarebbe il tuo caso d’uso? Perché non utilizzare la funzionalità integrata?

1 Mi Piace

Grazie per la risposta.

Sto usando uno script personalizzato per migrare gli utenti Drupal a Discourse, ma la password viene salvata come stringa hash e l’utente non può accedere con una password affidabile come (admin@123).

Ma accede con il loro hash della password come
ad es.:- 3sdfd32423@#423fdsfr

Potresti per favore spiegare un po’ riguardo alla funzionalità integrata?

Hai dato un’occhiata a questo? Potrebbe aiutare:

Supporta le password di Drupal 7:

1 Mi Piace

Ciao @Canapin

Inoltre, ho usato questo plugin ma non funziona

No, funziona.

Questo è uno dei plugin di terze parti più vecchi in circolazione (ormai ha più di 9 anni!) ed è stato mantenuto e ha funzionato per tutto questo tempo. Potrebbe non funzionare per te, ma il modo per risolvere il problema è scoprire perché non funziona per te invece di provare un percorso alternativo.

Puoi riformulare la frase? Non capisco cosa stai dicendo.

Il mio sito web Drupal memorizza le password degli utenti in un codice crittografato e le conserva in un database? Ho spostato tutti gli utenti su una piattaforma chiamata Discourse utilizzando un’API di Discourse. Ho creato un payload con i loro dettagli utente e i codici password dal database di Drupal e li ho inseriti in Discourse.

Pensavo che gli utenti sarebbero stati in grado di utilizzare i loro stessi dettagli di accesso su Drupal, ma non funziona. Discourse non accetta la password effettiva dell’utente, come “admin@123”. Invece, utilizza un codice hash della password dell’utente come “3sdfd32423@#423fdsfr”.

Discourse prende i codici password da Drupal e li inserisce nel proprio algoritmo crittografato nel proprio database.

Puoi mostrarci come hai fatto?
Se hai utilizzato l’API, non dovresti impostare l’hash di Drupal come password. Dovresti impostare l’hash come campo utente personalizzato chiamato import_pass. Non sono sicuro che sia possibile farlo tramite API.

1 Mi Piace

Ho seguito i tuoi passaggi durante l’installazione del plugin Discourse Migrate

  • Ho prima installato il plugin nel mio discourse ma non l’ho abilitato, quindi ho creato un campo personalizzato nel discourse con il nome import_pass

  • Nel payload ho aggiunto l’hash della password memorizzato in questo campo personalizzato

  • Dopo che l’utente ha caricato nel discourse, ho abilitato il plugin e ho effettuato l’accesso in una nuova finestra con le credenziali dell’utente ma non ci sono riuscito

Questo esplicitamente non fa parte dei passaggi.

C’è una differenza tra la creazione di un campo utente con quel nome e l’avere un campo personalizzato con quel nome. Quindi l’hash viene memorizzato nel posto sbagliato.

Il problema è che penso che quest’ultimo (un campo personalizzato) non sia accessibile tramite l’API.
Penso che il modo migliore per procedere sia avere del codice personalizzato una tantum che sposti il contenuto del campo utente nell’effettivo campo personalizzato.

(Ho considerato di modificare il plugin in modo che esamini anche il campo utente, ma penso che esporre questi hash all’interfaccia utente sia un rischio per la sicurezza, quindi non lo farò).

Questo funzionerà, eseguilo da una console rails (ti taggo in modo che tu veda la modifica @Hitesh_Sharma)

ufkey = "user_field_#{UserField.find_by(name: 'import_pass').id}"
User.all.each do |u|
  if u.custom_fields.key?(ufkey)
    u.custom_fields[:import_pass] = u.custom_fields[ufkey]
    u.custom_fields.delete(ufkey)
    u.save_custom_fields
  end
end
2 Mi Piace