Podemos criar um plugin personalizado e usar um endpoint personalizado como API
e criar um token com as credenciais do usuário e depois redefinir a senha com a API.
Por favor, compartilhe a melhor maneira de fazer esta tarefa
Estou usando um script personalizado para migrar usuários do Drupal para o Discourse, mas a senha é salva como uma string hash e o usuário não consegue fazer login com uma senha confiável como (admin@123).
Mas ele faz login com o hash da senha deles, como
por exemplo: - 3sdfd32423@#423fdsfr
Você poderia, por favor, explicar um pouco sobre o recurso integrado?
Este é um dos plugins de terceiros mais antigos existentes (mais de 9 anos!) e ele tem sido mantido e funcionando o tempo todo. Pode não estar funcionando para você, mas a maneira de resolver isso é descobrir por que não está funcionando para você, em vez de tentar uma rota alternativa.
Você pode reformular isso, por favor? Eu não entendo o que você está dizendo.
Meu site Drupal está armazenando senhas de usuários em um código criptografado e as mantendo em um banco de dados? Movi todos os usuários para uma plataforma chamada Discourse usando uma API do Discourse. Criei uma carga útil com os detalhes do usuário e os códigos de senha do banco de dados do Drupal e os coloquei no Discourse.
Pensei que os usuários poderiam usar os mesmos detalhes de login no Drupal, mas não está funcionando. O Discourse não aceita a senha real do usuário, como “admin@123”. Em vez disso, ele usa um código de hash de senha de usuário como “3sdfd32423@#423fdsfr”.
O Discourse pega os códigos de senha do Drupal e os insere em seu próprio algoritmo criptografado em seu próprio banco de dados.
Você pode nos mostrar como fez isso?
Se você estava usando a API, não deveria definir o hash do Drupal como senha. Você deveria definir o hash como um campo de usuário personalizado chamado import_pass. Não tenho certeza se isso é possível usando a API.
Há uma diferença entre criar um campo de usuário com esse nome e ter um campo personalizado com esse nome. Portanto, o hash está sendo armazenado no lugar errado.
O problema é que acho que o último (um campo personalizado) não é acessível pela API.
Acho que a melhor maneira de seguir em frente é ter algum código personalizado único que mova o conteúdo do campo do usuário para o campo personalizado real.
(Considerei alterar o plugin para que ele também olhe para o campo do usuário, mas acho que expor esses hashes à interface do usuário é um risco de segurança, então não vou fazer isso).
Isso funcionará, execute-o a partir de um console rails (marcando você para que veja a edição @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