Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Yii

Construyendo su Startup: invite a las personas a través de URL

by
Read Time:13 minsLanguages:
This post is part of a series called Building Your Startup With PHP.
Building Your Startup: Ajax for Meeting Times and Places
Building Your Startup: Increasing Security

Spanish (Español) translation by Elías Nicolás (you can also view the original English article)

Final product imageFinal product imageFinal product image
What You'll Be Creating

Este tutorial forma parte de la serie Construyendo su startup con PHP en Envato Tuts +. En esta serie, te guío a través del lanzamiento de una startup desde el concepto a la realidad utilizando mi aplicación Meeting Planner como un ejemplo de la vida real. En cada paso del camino, lanzaré el código de Meeting Planner como ejemplos de código abierto de los que puede aprender. También abordaré los problemas comerciales relacionados con el inicio a medida que surjan.

Programe su reunión grupal a través de la URL de acceso directo

¡Bienvenido! Hace poco volví de mi lugar favorito en el mundo, que mencioné al final del último episodio. Después de completar múltiples reuniones de participantes, tomé un descanso en la naturaleza.

Building Your Startup Secure Shareable Invitation URL - My Favorite Place In the WoodsBuilding Your Startup Secure Shareable Invitation URL - My Favorite Place In the WoodsBuilding Your Startup Secure Shareable Invitation URL - My Favorite Place In the Woods

Hoy, agregaré la capacidad de invitar a los participantes de la reunión al compartir una URL segura asociada a su reunión. Esto será especialmente útil para programar reuniones grupales. Por ejemplo, si desea invitar a 30 personas, a veces es más fácil enviar un correo electrónico a todos los que tienen una URL de invitación.

Si aún no lo ha hecho, intente programar su propia reunión de grupo hoy mismo. Invita a algunos amigos a conocerte para kombucha, kava o café. Comparta sus opiniones y comentarios sobre la experiencia de todos en los comentarios a continuación. Yo participo en las discusiones, pero también me pueden contactar @reifman en Twitter. Siempre estoy abierto a nuevas ideas de funciones para Meeting Planner, así como sugerencias para futuros episodios de series.

Como recordatorio, todo el código para Meeting Planner se proporciona de código abierto y está escrito en Yii2 Framework para PHP. Si desea obtener más información acerca de Yii2, consulte mis series paralelas Programando con Yii2.

Antes de profundizar en esta característica, quiero dar algunos ejemplos de algunos de los errores comunes del día (o descuidos) con los que me he encontrado construyendo el servicio. (Si solo desea leer sobre URL seguras para compartir, no dude en saltarse esta sección).

El interludio de errores de startup

A medida que más y más personas comienzan a probar el Meeting Planner, los errores comienzan a aparecer. Y, a menudo durante el desarrollo, los noto yo mismo. Aquí hay algunos más recientes, solo para darle una idea de la vida de startup.

Puede ser difícil enfocarse en el desarrollo comercial y el mercadeo, la codificación de nuevas características y la identificación y corrección de errores. La puesta en marcha en una sola persona tiene dificultades a medida que crecen las características de su sitio.

Como escribí antes, actualmente estoy usando Asana para la planificación de funciones, pero también para rastrear errores.

El error If Assignment

Estoy seguro de que si tuviera más experiencia como desarrollador, si trabajara con colegas o tuviera más tiempo para no codificar Meeting Planner, sabría exactamente qué extensión de Atom Editor busca para estos.

Aparentemente, en una característica importante para verificar si un espectador era en realidad un asistente a la reunión, estaba usando una tarea para verificar. En otras palabras, no estaba preguntando si el propietario era el espectador; temporalmente estaba haciendo que este fuera el caso.

Recuerda, dos iguales es una comparación, uno igual es una tarea. Al igual que los períodos son para concatenaciones y los signos más son para sumar, excepto en JavaScript, donde son infinitamente difíciles de encontrar errores (que es también la razón por la cual Ajax es un infierno en PHP).

Consultas de bases de datos que fallan con el tiempo

A medida que mi propio uso de Meeting Planner aumentó, hubo más y más reuniones en mis vistas tabuladas. Y luego noté que a veces aparecían duplicados. Esto era difícil de detectar antes cuando había menos datos.

Mis consultas de reuniones específicas de las pestañas (es decir, planificar una reunión, reuniones confirmadas, reuniones pasadas, etc.) no estaban aislando entradas únicas:

Agregar ->distinct() a la consulta solucionado.

Paginación Yii2 en Grid Views en Tabbed

Otro error que encontré con más datos fue que los enlaces de paginación Yii2 siempre me llevaron de vuelta a la primera pestaña.

Building Your Startup Secure Shareable Invitation URL - Pagination of MeetingsBuilding Your Startup Secure Shareable Invitation URL - Pagination of MeetingsBuilding Your Startup Secure Shareable Invitation URL - Pagination of Meetings

Agregué un parámetro de consulta para la pestaña actual que MeetingController.php actionIndex ahora busca:

Además, di instrucciones a los parámetros de paginación pagination params para fusionar la configuración de la pestaña actual. Cuando los usuarios hacen clic en un enlace de página diferente, la pestaña actual ahora está incluida.

Finalmente, también hice que /frontend/views/meeting/index.php fuera consciente de esto, estableciendo la pestaña activa desde el parámetro de consulta:

Esos son solo algunos buenos ejemplos del tipo de errores cotidianos con los que me encuentro para crear una startup que sea el alcance de Meeting Planner.

Ahora, profundicemos en crear invitaciones a través de URL de acceso directo como se prometió.

Creación de URL de acceso directo compartibles y seguras

Pensando en la seguridad para las URL

Para que sea más difícil que una ráfaga aleatoria de conjeturas de URL se rompa con la invitación a una reunión de alguien, necesitaba una clave bastante única combinada con un código indescifrable.

Decidí usar el nombre de usuario de la persona como clave. Cada usuario tendría una gran cantidad de códigos de reunión casi indescifrables.

Entonces, por ejemplo, una URL de reunión podría ser https://meetingplanner.io/presidenthillary/X1Y2Z3A7C9.

Para el código, decidí usar ocho caracteres alfanuméricos sensibles a las mayúsculas y minúsculas. En otras palabras, cada personaje sería a-z, A-Z o 0-9, esencialmente 62 posibilidades para cada personaje.

El número total de posibilidades para cada usuario es 218,340,105,584,896, más de 218 billones. ¡Ah, y para poder comenzar, tendrías que saber el nombre de usuario de tu objetivo! Sería mucho más fácil piratear la cuenta de correo electrónico de un participante.

Agregar el código de seguridad para cada reunión

Para agregar un código de seguridad a todas las reuniones existentes, creé una migración, m160902_174350_extend_meeting_for_identifier.php:

Notará que en esta migración, realmente uso el código para crear cadenas aleatorias para cada reunión existente, es decir, Yii::$app->security->generateRandomString(8);.

No es frecuente que escriba código en una migración para actualizar las áreas existentes de la base de datos. En este caso, funciona sin problemas. Otras veces, he usado el modelo /frontend/models/Fix.php.

Además, en Meeting::beforeSave(), agregué código automatizado para generar un identificador para todas las reuniones futuras:

Extendiendo el enrutamiento Yii

Si bien hubiera sido más fácil incluir un prefijo de controlador como /m/username/identity-code, quería que los enlaces fueran simples, sin prefijo adicional. Esto requirió extender el enrutamiento Yii.

Si mantuviera esto dentro de su propio modelo para el prefijo y el nombre de usuario, podría haber podido usar lo que escribí en Yii2 Comportamiendo URL semantica y Construyendo tu startup: Geolocation y Google Places.

En cambio, agregué '<username>/<identity:[A-Za-z0-9_-]{8}>' => 'meeting/identity',, que asigna cualquier nombre de usuario con una cadena de identidad al método MeetingController actionIdentity().

Con esto, me encontré con algunos problemas. Tuve que reordenar las reglas y poner rutas estáticas para cualquier acción de ocho caracteres que pudiera parecer un nombre de usuario (en lugar de un controlador) y un método (en lugar de una clave de identidad).

Por ejemplo, https://meetingplanner.io/site/features asignadas a un sitio con nombre de usuario que tiene una Id. De reunión segura de "características" en lugar de la nueva y atractiva tabla de características de Meeting Planner.

Pero, una vez que me orienté a los problemas, todo funcionó bien.

El método de identidad del controlador de reuniones

Luego, construí actionIdentity() dentro de MeetingController:

Primero, verifica que el nombre de usuario y la identidad corresponden a un usuario existente y una reunión existente. Si no, los enviamos a authfailure.

Si el usuario ya inició sesión, los agregamos automáticamente como participantes a esta página y los redirigimos a la página de vista de la reunión.

Si no es así, se los enviamos a un controlador Participante. Únase a la acción para abordar el inicio de sesión o el registro.

Participante solicitando unirse a una reunión

Por ejemplo, supongamos que recibo la siguiente invitación por correo electrónico de un amigo:

https://meetingplanner.io/tomeMcFarline/JzRq1a42. Se me mostrará esta página:

Building Your Startup Secure Shareable Invitation URL - Participant Join Page from Invite URLBuilding Your Startup Secure Shareable Invitation URL - Participant Join Page from Invite URLBuilding Your Startup Secure Shareable Invitation URL - Participant Join Page from Invite URL

Si el usuario desea suscribirse para Meeting Planner a través de una red social, podremos validar su dirección de correo electrónico.

Así que configuro la URL de retorno Yii (una página a la que se redirige al usuario después de un registro o inicio de sesión satisfactorio) que los devolverá a la página de la vista Reunión después de la autenticación.

En su mayor parte, la autenticación social, el inicio de sesión y / o el registro se administran mediante el código que describí en Construyendo su inicio: Simplificando Onramp con OAuth.

Si el participante es nuevo, proporcionarán su nombre y apellido y dirección de correo electrónico. Los agregaremos a la reunión como un participante no verificado, similar a lo que hacemos cuando un usuario invita a alguien agregando una nueva dirección de correo electrónico a la reunión.

Te preguntas en este momento, oye Jeff, ¿qué pasa con ... hoy? Esto es simple, ¿verdad? Estamos agregando un nuevo usuario a una reunión.

Mientras codificaba esto, me di cuenta de que estaba creando un gran vacío de privacidad.

Un ejemplo de agujero de seguridad divertida

Digamos que Tom McFarlin no tiene nada que hacer un día y decide meterse conmigo (y con Dios). Creará una nueva reunión y, sabiendo que el Dalai Lama es un usuario habitual de Meeting Planner (debido a todas sus reuniones espirituales), McFarlin lo agregará a su reunión mediante el correo electrónico dalailama@gmail.com.

Luego, tomará su elegante URL de atajo seguro. ¿Siguiéndome?

A continuación, McFarlin abrirá un navegador diferente y abrirá su URL de acceso directo seguro y fingirá que es el Dalai Lama que acaba de recibir una invitación diferente por correo electrónico de Tom, es decir, tratará de unirse a su propia reunión como si fuera el Dalai Lama. es decir, Dalai, Lama, dalailama@gmail.com.

Inicialmente, supuse que no era probable que alguien adivinara la URL segura, por lo que si eso ocurriera, dejaría que una persona inicie sesión de esta manera.

Sin embargo, esto le daría a McFarlin el acceso peligroso a la cuenta del Dalai Lama (en parte porque aún no he creado el modo de acceso limitado para que los usuarios ingresen a través de las URL para poder ver solo una reunión hasta que inicien sesión).

Sí, mi código inicial funcionó de esta manera. Y luego recibí una llamada desde el cielo y señalé esto.

¿Qué pasa si McFarlin invita a Sally y Sally a enviara la URL segura a Bill Gates? Al agregar a Bill Gates manualmente a la reunión primero, McFarlin pudo acceder a todas las reuniones de Gates con este truco.

El nuevo código requiere que un participante use la URL segura que ya se haya agregado casualmente a la reunión para iniciar sesión manualmente. Aquí está el ... código:

Volveré a aplicar el parche una vez que haya creado el modo de acceso restringido de reunión única.

Puede que no hubiera pensado en esto si no hubiera sabido lo malvado que es McFarlin. Uf. Una reina más salvada del envenenamiento.

Building Your Startup Secure Shareable Invitation URL - The Devious Editorial God Tom McFarlin Or NotBuilding Your Startup Secure Shareable Invitation URL - The Devious Editorial God Tom McFarlin Or NotBuilding Your Startup Secure Shareable Invitation URL - The Devious Editorial God Tom McFarlin Or Not

Probablemente tomar mi fin de semana largo en la naturaleza me puso más en contacto con los cielos también.

¿Qué hay en la Pipeline (tubería)?

Building Your Startup Secure Shareable Invitation URL - Surfing Pipeline imageBuilding Your Startup Secure Shareable Invitation URL - Surfing Pipeline imageBuilding Your Startup Secure Shareable Invitation URL - Surfing Pipeline image
Dominio público a través de Google y Hawaii Imagen del día

Espero que hayan disfrutado de este episodio sobre la creación de URL seguras para invitar a las personas a las reuniones.

Me imagino que es altamente reutilizable para otros escenarios en sus propios servicios.Probablemente también pueda decir que estoy disfrutando del potencial planificador de reuniones que parece tener en este momento, o que he estado trabajando demasiado tiempo.

En definitiva, crear invitaciones de URL seguras también abre la posibilidad de ofrecer a los usuarios una página de programación pública. Por ejemplo, puedo compartir mi URL pública de Meeting Planner con amigos y, por ejemplo, simplemente programarme en https://meetingplanner.io/username.

En el futuro, podría incluso extender Meeting Planner para ofrecer características de suscripción para que los profesionales tomen citas en su página pública de Meeting Planner. Sin embargo, tengo otras ideas más emocionantes. Este territorio está bien delimitado por otras empresas orientadas a los negocios.

Montar la ola en casa

Si aún no lo ha hecho, programe su primera reunión con Meeting Planner ahora mismo. Intente compartir la URL de acceso directo de su reunión y manténgala en secreto con nuestro dios editorial Tom McFarlin.

También puede comunicarse conmigo @reifman. Siempre estoy abierto a nuevas ideas de características y sugerencias de temas para futuros tutoriales. O pruebe nuestro servicio de ayuda y abra un informe de error o un ticket de solicitud de función.

También se está preparando un tutorial sobre crowdfunding, así que por favor siga nuestra página WeFunder Meeting Planner.

Estén atentos para todo esto y más próximos tutoriales visitando la serie Construyendo su startup con PHP.

enlaces relacionados

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.