Estou migrando um fórum para o Discourse. Estou usando a mesma abordagem do plugin discourse-migratepassword para permitir que os usuários façam login com sua senha atual, mas essas senhas podem ser inseguras.
Quero permitir que os usuários façam login, mas forçá-los a alterar sua senha após o login se ela não estiver em conformidade com as configurações de senha do Discourse.
Existe uma maneira de fazer isso atualmente? Se não, onde devo procurar para implementar isso como um plugin?
Yeah, we can use that in the plugin too, happy to contribute that back if I implement it.
I was thinking in adding a custom_field to the user and render an alert until the user changes their password, but forcing them to change it sounds like a better option (not sure where to look to achieve this)
I’m setting a user.custom_fields['migratepassword_policy'] = true if the password doesn’t comply with Discourse settings and using that to conditionally render the modal, and we also send a password reset email once after they log in for the first time (with the insecure password)
Yeah, in this case we allow users to get into the platform with their current password, but we will render that modal until they change it (they can click OK or click outside the modal and it will close)
Maybe adding a “contact support if you don’t have access to your email anymore” message will do in case of dead email accounts
Ei, exatamente o mesmo que precisamos. Vamos criar usuários via API com uma senha padrão… depois que o usuário fizer o primeiro login, ele deverá alterar sua senha…
Em vez de criar um usuário com uma senha padrão, você deve criar o usuário com uma senha aleatória e nunca enviá-la a ele. Em seguida, ele pode usar o link ‘Esqueci minha senha’ na página de login para redefinir sua senha antes de fazer o login.
O Discourse agora oferece suporte à capacidade nativa de expirar senhas.
Para fazer isso, você precisará executar:
user = User.find_by_username(username)
UserPasswordExpirer.expire_user_password(user)
Isso pode ser feito pela equipe do Discourse para clientes hospedados ou entrando em seu contêiner, executando um console Rails e executando isso nos usuários específicos.