2012-05-08 11 views
8

quiero obligar a todos los usuarios aceptan los términos de servicio, al igual que se describe aquí:¿Cree que el usuario debe aceptar los términos de servicio?

Ruby on Rails/Devise - Bypassing custom validation option in model when resetting password

Sin embargo, hay 2 requisitos que hacen que el enfoque anterior no encaja.

1) Los usuarios no son autoregistrados, sino que son creados por un administrador del sistema. El administrador obviamente no puede aceptar los términos y condiciones en nombre del usuario. Se debe solicitar al usuario que acepte los términos y condiciones en su primer inicio de sesión.

2) Si los términos y condiciones cambian después del hecho. Los usuarios deben volver a aceptar los nuevos términos en los inicios de sesión posteriores.

Parecen flujos de trabajo bastante estándar. ¿El dispositivo proporciona alguna forma de lograr esto?

De lo contrario, creo que esta verificación deberá implementarse en un before_filter en mi controlador de aplicación. (Se siente sucio mezclando la autenticación con la lógica de la aplicación ...)

¿Tendré que recurrir a esto o alguien puede sugerir una manera mejor?

Gracias

+2

Creo que devise/auth no tiene nada que ver con la lógica de negocios (términos). Tendrás que hacer un filtro antes en el controlador de la aplicación. No estás mezclando auth con lógica comercial. El usuario está autenticado pero no puede acceder a ninguna página hasta que acepte los términos de uso – bcd

Respuesta

0

¿no podría, teóricamente, simplemente desactivar moviéndose más en su aplicación utilizando jQuery?

Deshabilite su formulario "continuar" o "iniciar sesión" hasta que haya marcado una casilla o presione el botón Continuar, luego active su botón de inicio de sesión una vez que lo hayan hecho.

Si necesita almacenar esa información solo haga una columna en su base de datos en el usuario que se publique también cuando marque la casilla o presione el botón Continuar, o incluso podría utilizar el número de inicios de sesión como una forma de saber

Si user.logs> 0, el usuario ya ha aceptado los términos.
Si user.logs == 0, entonces el usuario necesita aceptar los términos antes de iniciar sesión.

Creo que de acuerdo con su pregunta parece que atar todo a Devise suena demasiado complejo.

Espero que esto ayude.

2

esto no es algo que el dispositivo maneje y no debe manejar esto porque un TOS no pertenece a la autenticación.

Lo que podría hacer es algo así como implementar una máquina de estado, pero eso puede ser más complejo de lo que necesita.

La manera más sencilla sería agregar un campo booleano aceptado_en su modelo de usuario y vincularlo a un before_filter, entonces establecería los accept_tos en falso cada vez que se actualice el TOS.

Cuestiones relacionadas