Fonction personnalisée pour la mise à jour du mot de passe dans Discourse
Pouvons-nous utiliser ce code pour mettre à jour le mot de passe ?
par exemple :-
User.find_by(username: ‘gollum’).update!(password: ‘shiiiire!-BAGGINS!’)
Ou
Pouvons-nous créer un plugin personnalisé et utiliser un point de terminaison personnalisé comme l’API
et créer un jeton avec les informations d’identification de l’utilisateur, puis réinitialiser le mot de passe avec l’API.
Veuillez partager la meilleure façon d’accomplir cette tâche.
J’utilise un script personnalisé pour migrer les utilisateurs Drupal vers Discourse, mais le mot de passe est enregistré sous forme de chaîne de hachage et l’utilisateur ne peut pas se connecter avec un mot de passe fiable comme (admin@123).
Mais il se connecte avec leur hachage de mot de passe comme
par exemple : - 3sdfd32423@#423fdsfr
Pourriez-vous s’il vous plaît expliquer un peu la fonctionnalité intégrée ?
C’est l’un des plus anciens plugins tiers (plus de 9 ans maintenant !) et il a été maintenu et a fonctionné tout le temps. Il se peut qu’il ne fonctionne pas pour vous, mais la façon de résoudre ce problème est de trouver pourquoi il ne fonctionne pas pour vous au lieu d’essayer une voie alternative.
Pouvez-vous reformuler cela s’il vous plaît ? Je ne comprends pas ce que vous dites.
Mon site Web Drupal stocke-t-il les mots de passe des utilisateurs dans un code crypté et les conserve-t-il dans une base de données ? J’ai déplacé tous les utilisateurs vers une plateforme appelée Discourse à l’aide d’une API Discourse. J’ai créé une charge utile avec leurs détails d’utilisateur et leurs codes de mot de passe de la base de données de Drupal et je les ai mis dans Discourse.
Je pensais que les utilisateurs pourraient utiliser leurs mêmes détails de connexion sur Drupal, mais cela ne fonctionne pas. Discourse n’accepte pas le mot de passe réel de l’utilisateur, comme « admin@123 ». Au lieu de cela, il utilise un code de hachage de mot de passe utilisateur comme « 3sdfd32423@#423fdsfr ».
Discourse prend les codes de mot de passe de Drupal et les insère dans son propre algorithme crypté dans sa propre base de données.
Pouvez-vous nous montrer comment vous avez fait ?
Si vous avez utilisé l’API, vous ne devriez pas définir le hachage Drupal comme mot de passe. Vous devriez définir le hachage comme un champ utilisateur personnalisé appelé import_pass. Je ne suis pas sûr que ce soit même possible en utilisant l’API.
J’ai suivi vos étapes lors de l’installation du plugin Discourse Migrate
J’ai d’abord installé le plugin dans mon discourse mais je ne l’ai pas activé, puis j’ai créé un champ personnalisé dans discourse avec le nom import_pass
Dans la charge utile, ajoutez le hachage du mot de passe stocké dans ce champ personnalisé
Après que l’utilisateur se soit téléchargé dans le discourse, activez le plugin et connectez-vous dans une nouvelle fenêtre avec les identifiants de l’utilisateur mais ils ne l’ont pas fait
Il y a une différence entre créer un champ utilisateur avec ce nom et avoir un champ personnalisé avec ce nom. Le hachage est donc stocké au mauvais endroit.
Le problème est que je pense que ce dernier (un champ personnalisé) n’est pas accessible via l’API.
Je pense que la meilleure façon de procéder est d’avoir un code personnalisé unique qui déplace le contenu du champ utilisateur vers le champ personnalisé réel.
(J’ai envisagé de modifier le plugin pour qu’il examine également le champ utilisateur, mais je pense que rendre ces hachages accessibles à l’interface utilisateur présente un risque de sécurité, donc je ne vais pas le faire).
Cela fonctionnera, exécutez-le à partir d’une console Rails (je vous tague pour que vous voyiez la modification @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