Redefinir senha com arquivo ruby personalizado

Função personalizada para atualização de senha no Discourse

Podemos usar este código para atualizar a senha?

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

Ou

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

Oi Hitesh,

Qual seria o seu caso de uso? Por que não usar o recurso integrado?

1 curtida

Obrigado pela resposta.

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?

Você já deu uma olhada nisso? Pode ajudar:

Ele suporta senhas do Drupal 7:

1 curtida

oi @Canapin

Além disso, usei este plugin, mas ele não está funcionando

Não - está funcionando.

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.

1 curtida

Segui seus passos ao instalar o plugin Discourse Migrate

  • Instalei o plugin no meu discourse, mas não o ativei, em seguida criei um campo personalizado no discourse com o nome import_pass

  • Na carga útil, adicionei o hash da senha armazenado neste campo personalizado

  • Após o usuário fazer o upload para o discourse, ativei o plugin e fiz login em uma nova janela com as credenciais do usuário, mas eles não conseguiram

Isso é explicitamente não parte dos passos.

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
2 curtidas