Forzar cambio de contraseña después de iniciar sesión

Hola,

Estoy migrando un foro a Discourse. Estoy utilizando el mismo enfoque que el plugin discourse-migratepassword para permitir que los usuarios inicien sesión con su contraseña actual, pero estas contraseñas pueden no ser seguras.

Quiero permitir que los usuarios inicien sesión, pero obligarlos a cambiar su contraseña después del inicio de sesión si no cumple con la configuración de contraseñas de Discourse.

¿Existe alguna forma de hacer esto actualmente? Si no es así, ¿dónde debería buscar para implementarlo como un plugin?

¡Gracias!

Sounds like it would be useful as an option on the discourse-migratepassword plugin. Slightly surprised it isn’t already.

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)

Well, I’m not forcing users to change their password, but we are rendering an alert on every login until they do so.

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)

What do you guys think?

I think it was enabled without an option in the past - if your password was too short, you were required to do a password reset instead.

The policy was flipped because this was locking people out of their accounts (dead email accounts).

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

¡Hola, exactamente lo mismo que nosotros necesitamos! Vamos a crear usuarios mediante la API con una contraseña predeterminada… después de que el usuario inicie sesión por primera vez, deberá cambiar su contraseña…

¿Cómo lo hiciste?

¡Gracias!

En lugar de crear un usuario con una contraseña predeterminada, debes crearlo con una contraseña aleatoria y nunca enviársela. Luego, pueden utilizar el enlace de «olvidé mi contraseña» en la página de inicio de sesión para restablecer su contraseña antes de iniciar sesión.

El 99% de nuestros usuarios no tiene dirección de correo electrónico ^^ y no queremos añadir tantos correos solo para “recuperar contraseñas”.

¿No hay otra forma además de usar correos reales?

Eso será un gran problema, ya que en Discourse el correo electrónico se considera la identidad…

Si deseas tener control total sobre el proceso de inicio de sesión para cumplir con tus estándares, te recomiendo utilizar Inicio de sesión único oficial para Discourse (sso).

Discourse ahora admite la capacidad nativa de expirar contraseñas.

Para hacerlo, deberás ejecutar:

user = User.find_by_username(username)
UserPasswordExpirer.expire_user_password(user)

Esto puede ser hecho por el personal de Discourse para clientes alojados o ingresando a tu contenedor, ejecutando una consola de Rails y ejecutando esto en los usuarios particulares.