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

Erstellen Sie Ihr Startup: Laden Sie Personen per URL ein

by
Difficulty:IntermediateLength:LongLanguages:
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

German (Deutsch) translation by Wei Zhang (you can also view the original English article)

Final product image
What You'll Be Creating

Dieses Tutorial ist Teil der Building Your Startup with PHP-Serie auf Envato Tuts +. In dieser Serie führe ich Sie durch die Einführung eines Start-ups von der Idee zur Realität mit meiner Meeting-Planer-App als ein echtes Beispiel. Bei jedem Schritt werde ich den Meeting-Planer-Code als Open-Source-Beispiele veröffentlichen, von denen Sie lernen können. Ich werde auch auf geschäftliche Probleme im Zusammenhang mit dem Start eingehen, sobald sie auftreten.

Planen Sie Ihr Gruppentreffen über die Verknüpfungs-URL

Herzlich willkommen! Ich bin kürzlich von meinem Lieblingsort in der Welt zurückgekehrt, den ich am Ende der letzten Episode erwähnt habe. Nach mehreren Teilnehmertreffen habe ich eine Pause in der Natur gemacht.

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

Heute werde ich die Möglichkeit hinzufügen, Besprechungsteilnehmer einzuladen, indem Sie eine sichere URL freigeben, die mit Ihrem Meeting verknüpft ist. Dies ist besonders hilfreich für die Planung von Gruppentreffen. Wenn Sie beispielsweise 30 Personen einladen möchten, ist es manchmal einfacher, eine E-Mail an alle Personen mit einer Einladungs-URL zu senden.

Wenn Sie es noch nicht getan haben, versuchen Sie noch heute, Ihr eigenes Gruppentreffen zu planen! Lade ein paar Freunde ein, um dich zu Kombucha, Kava oder Kaffee zu treffen. Teilen Sie Ihre Gedanken und Erfahrungen in den Kommentaren mit. Ich nehme an den Diskussionen teil, aber Sie können mich auch @reifman auf Twitter erreichen. Ich bin immer offen für neue Feature-Ideen für Meeting Planner sowie Vorschläge für zukünftige Serienepisoden.

Zur Erinnerung: Der gesamte Code für Meeting Planner wird als Open Source bereitgestellt und im Yii2 Framework for PHP geschrieben. Wenn Sie mehr über Yii2 erfahren möchten, schauen Sie sich meine Parallel-Serie Programmierung mit Yii2 an.

Bevor ich auf dieses Feature eingehe, möchte ich einige Beispiele für alltägliche Bugs (oder Versäumnisse) nennen, die ich bei der Erstellung des Service angetroffen habe. (Wenn Sie nur über sichere gemeinsam nutzbare URLs lesen möchten, können Sie diesen Abschnitt überspringen.)

Das Startup Bug Interlude

Wenn immer mehr Leute Meeting Planner ausprobieren, kommen Fehler ins Spiel. Und oft merke ich sie während der Entwicklung selbst. Hier sind ein paar aktuelle, nur um Ihnen eine Vorstellung von Startup-Leben zu geben.

Es kann schwierig sein, sich auf die Geschäftsentwicklung und das Marketing zu konzentrieren, neue Funktionen zu programmieren und Bugs zu identifizieren und zu beheben. Das Ein-Personen-Startup wächst in Schwierigkeiten, wenn die Funktionen deiner Seite wachsen.

Wie ich schon früher geschrieben habe, verwende ich derzeit Asana für die Feature-Planung - aber auch um Fehler zu verfolgen.

Der Fehler bei der Zuweisung

Ich bin sicher, wenn ich mehr Erfahrung als Entwickler hätte, mit Kollegen arbeiten würde oder mehr Zeit hätte, Meeting Planner nicht zu programmieren, würde ich genau wissen, welche Atom Editor-Erweiterung nach diesen sucht. Wenn du es weißt, poste es bitte in den Kommentaren.

Anscheinend war ich in einer wichtigen Funktion, um zu überprüfen, ob ein Betrachter tatsächlich ein Besprechungsteilnehmer war, mit der Aufgabe zu überprüfen. Mit anderen Worten, ich fragte nicht, ob der Besitzer der Betrachter war - ich machte dies vorübergehend so.

Sie erinnern sich, zwei gleich ist ein Vergleich, ein gleich ist eine Aufgabe. Genau wie Perioden für Verkettungen und Pluszeichen für die Addition, außer in JavaScript, wo sie für endlos schwierig zu finden sind Bugs (weshalb auch Ajax ist die Hölle in PHP).

Datenbankabfragen, die im Laufe der Zeit fehlschlagen

Als meine eigene Verwendung von Meeting Planner zunahm, gab es in meinen Tabbed Views immer mehr Meetings. Und dann bemerkte ich, dass manchmal Dubletten auftauchen würden. Dies war früher schwer zu erkennen, wenn weniger Daten vorhanden waren.

Meine tabellenspezifischen Besprechungsanfragen (z. B. Planen einer Besprechung, bestätigte Besprechungen, vergangene Besprechungen usw.) isolierten eindeutige Einträge nicht:

Das Hinzufügen von ->distinct()zur Abfrage hat es behoben.

Yii2 Paginierung auf Rasteransichten auf Registerkarten

Ein weiterer Fehler, dem ich bei mehr Daten begegnete, war, dass Yii2 Paginierungslinks mich immer zum ersten Tab zurückführten.

Building Your Startup Secure Shareable Invitation URL - Pagination of Meetings

Ich habe einen Abfrageparameter für die aktuelle Registerkarte hinzugefügt, nach der MeetingController.php actionIndex nun sucht:

Außerdem wies ich die pagination params an, die aktuelle Tab-Einstellung zusammenzuführen. Wenn Benutzer auf einen anderen Seitenlink klicken, ist der aktuelle Tab jetzt enthalten.

Schließlich habe ich auch /frontend/views/meeting/index.php darauf aufmerksam gemacht und die aktive Registerkarte aus dem Abfrageparameter gesetzt:

Das sind nur ein paar gute Beispiele für die alltägliche Art von Bugs, die ich beim Erstellen eines Startups den Bereich von Meeting Planner renne.

Lassen Sie uns nun wie versprochen Einladungen über Verknüpfungs-URLs erstellen.

Erstellen von sicheren gemeinsam nutzbaren Verknüpfungs-URLs

Gedanken zur Sicherheit für URLs

Um es einem zufälligen Spruch von URL-Vermutungen zu erschweren, in die Besprechungseinladung eines anderen einzubrechen, brauchte ich einen ziemlich eindeutigen Schlüssel, der mit einem nicht zu bearbeitenden Code kombiniert wurde.

Ich beschloss, den Benutzernamen der Person als Schlüssel zu verwenden. Jeder Benutzer hätte eine große Anzahl fast nicht zu entdeckender Meeting-Codes.

So könnte beispielsweise eine Besprechungs-URL https://meetingplanner.io/presidenthillary/X1Y2Z3A7C9 lauten.

Für den Code habe ich mich dazu entschieden, acht Groß- und Kleinschreibung alphanumerische Zeichen zu verwenden. Mit anderen Worten, jedes Zeichen wäre a-z, A-Z oder 0-9, im wesentlichen 62 Möglichkeiten für jedes Zeichen.

Die Gesamtzahl der Möglichkeiten für jeden Benutzer beträgt 218.340.105.584.896 - mehr als 218 Billionen. Oh, und du musst den Benutzernamen deines Ziels kennen, um loszulegen! Es wäre viel einfacher, den E-Mail-Account eines Teilnehmers zu hacken.

Hinzufügen des Sicherheitscodes für jede Besprechung

Um einen Sicherheitscode zu allen vorhandenen Besprechungen hinzuzufügen, habe ich eine Migration erstellt, m160902_174350_extend_meeting_for_identifier.php:

Sie werden feststellen, dass bei dieser Migration tatsächlich Code verwendet wird, um zufällige Zeichenfolgen für jedes vorhandene Meeting zu erstellen, d. H. Yii::$app->security->generateRandomString(8);.

Es ist nicht oft, dass ich Code in eine Migration schreibe, um vorhandene Bereiche der Datenbank zu aktualisieren. In diesem Fall funktioniert es reibungslos. Andere Male habe ich das /frontend/models/Fix.php Modell verwendet.

Außerdem habe ich in Meeting::beforeSave() automatischen Code hinzugefügt, um eine ID für alle zukünftigen Besprechungen zu generieren:

Erweitern des Yii-Routings

Während es am einfachsten wäre, ein Controller-Präfix wie /m/username/identity-code einzufügen, wollte ich, dass Links einfach sind und kein zusätzliches Präfix. Dies erforderte eine Erweiterung des Yii-Routing.

Wenn ich dies in meinem eigenen Modell für das Präfix und den Benutzernamen beibehalten hätte, wäre ich möglicherweise in der Lage gewesen, das zu verwenden, worüber ich in Yii2 Sluggable Behaviors und Building Your Startup: Geolocation und Google Places geschrieben habe.

Stattdessen habe ich '<username>/<identity:[A-Za-z0-9_-]{8}>' => 'meeting/identity' hinzugefügt, das einen Benutzernamen mit einer Identitätszeichenfolge der MeetingController actionIdentity() -Methode zuordnet .

Damit hatte ich ein paar Probleme. Ich musste die Regeln neu anordnen und statische Routen für achtstellige Aktionen einfügen, die wie ein Benutzername (anstelle eines Controllers) und eine Methode (anstelle eines Identitätsschlüssels) aussahen.

Beispiel: https://meetingplanner.io/site/features wird einem Benutzer namens site zugeordnet, der eine sichere Besprechungs-ID von "features" anstelle der coolen neuen Feature-Tabelle von Meeting Planner hat.

Aber sobald ich mich an die Probleme orientiert habe, hat alles gut funktioniert.

Die Meeting-Controller-Identitätsmethode

Als Nächstes habe ich actionIdentity() in MeetingController erstellt:

Zuerst wird überprüft, ob der Benutzername und die Identität einem vorhandenen Benutzer und einem vorhandenen Meeting entsprechen. Wenn nicht, schicken wir sie an autfailure.

Wenn der Benutzer bereits angemeldet ist, fügen wir diese automatisch als Teilnehmer zu dieser Seite hinzu und leiten sie zur Ansichtsseite des Meetings um.

Wenn dies nicht der Fall ist, senden wir sie an einen Teilnehmer-Controller. Melden Sie sich an, um sich anzumelden oder sich anzumelden.

Teilnehmer, der an einem Meeting teilnehmen möchte

Angenommen, ich erhalte die folgende E-Mail-Einladung von einem Freund:

https://meetingplanner.io/tomeMcFarline/JzRq1a42. Ich werde diese Seite angezeigt werden:

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

Wenn der Benutzer sich über ein soziales Netzwerk für Meeting Planner anmelden möchte, können wir seine E-Mail-Adresse überprüfen.

Daher habe ich die Yii-Rückgabe-URL festgelegt (eine Seite, auf die der Benutzer nach einer erfolgreichen Anmeldung oder Anmeldung weitergeleitet wird), die nach der Authentifizierung zur Seite der Besprechungsansicht zurückkehrt.

Die soziale Authentifizierung, Anmeldung und / oder Anmeldung wird größtenteils durch den Code, den ich in Build Your Startup: Vereinfachung von Onramp mit OAuth beschrieben habe, verwaltet.

Wenn der Teilnehmer neu ist, gibt er seinen Vor- und Nachnamen und seine E-Mail-Adresse an. Wir fügen sie dem Meeting als nicht verifizierter Teilnehmer hinzu, ähnlich wie wenn ein Nutzer jemanden einlädt, indem er dem Meeting eine neue E-Mail-Adresse hinzufügt.

Du fragst dich gerade, hey Jeff, was ist mit dem ... heute? Das ist einfach, oder? Wir fügen nur einen neuen Nutzer zu einem Meeting hinzu.

Während ich dies kodierte, wurde mir klar, dass ich ein riesiges Loch für die Privatsphäre geschaffen habe.

Ein Spaß Sicherheitsloch Beispiel

Lassen Sie uns sagen, dass Tom McFarlin eines Tages nichts zu tun hat und beschließt, sich mit mir (und Gott) anzulegen. Er wird eine neue Besprechung erstellen und da er weiß, dass der Dalai Lama aufgrund seiner spirituellen Treffen ein regelmäßiger Meeting-Planer-Benutzer ist, wird McFarlin ihn zu seinem Meeting hinzufügen, indem er die E-Mail dalailama@gmail.com verwendet....

Dann wird er seine schicke sichere Abkürzung URL greifen. Folgen mir?

Als nächstes wird McFarlin einen anderen Browser öffnen und seine sichere Abkürzungs-URL öffnen und so tun, als wäre er der Dalai Lama, der gerade eine andere Einladung per E-Mail von Tom erhalten hat, d. H. Er wird versuchen, an seinem eigenen Treffen teilzunehmen, als wäre er der Dalai Lama. d. h. Dalai, Lama, dalailama@gmail.com.

Anfangs nahm ich an, dass es keine Wahrscheinlichkeit gab, dass jemand die sichere URL erraten würde. Wenn das passierte, würde ich mich einfach auf diese Weise einloggen.

Aber dies würde dem gefährlichen McFarlin Zugriff auf das Konto des Dalai Lama verschaffen (teilweise, weil ich den eingeschränkten Zugriffsmodus für Benutzer, die über URLs eintreffen, noch nicht aufgebaut habe, um nur ein einziges Meeting sehen zu können, bis sie sich einloggen).

Ja, mein erster Code hat so funktioniert. Und dann bekam ich einen Anruf vom Himmel und wies darauf hin.

Was ist, wenn McFarlin Sally und Sally eingeladen hat, die sichere URL an Bill Gates weiterzuleiten? Durch das manuelle Hinzufügen von Bill Gates zu dem Meeting konnte McFarlin mit diesem Trick auf alle Meetings von Gates zugreifen.

Der neue Code erfordert, dass ein Teilnehmer die sichere URL verwendet, die bereits zufällig zur Besprechung hinzugefügt wurde, um sich manuell anzumelden. Hier ist der ... Code:

Ich werde dies erneut patchen, sobald ich den Modus für den eingeschränkten Zugriff für einzelne Besprechungen erstellt habe.

Ich hätte vielleicht nicht darüber nachgedacht, wenn ich nicht gewusst hätte, wie hinterhältig McFarlin ist. Puh. Eine weitere Königin vor Vergiftung gerettet.

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

Wahrscheinlich hat mich mein langes Wochenende in der Natur auch mehr in den Himmel gebracht.

Was ist in der Pipeline?

Building Your Startup Secure Shareable Invitation URL - Surfing Pipeline image
Public Domain über Google & Hawaii Picture of the Day

Ich hoffe, es hat Ihnen Spaß gemacht, sichere URLs zu erstellen, um Personen zu Besprechungen einzuladen. Ich kann mir vorstellen, dass es für andere Szenarien in Ihren eigenen Diensten höchst wiederverwendbar ist.

Sie können wahrscheinlich auch sagen, dass ich entweder den potenziellen Meeting-Planer zu diesem Zeitpunkt genießen kann - oder ich habe gerade zu lange gearbeitet.

Letztendlich eröffnet die Erstellung sicherer URL-Einladungen auch die Möglichkeit, Benutzern eine öffentliche Planungsseite anzubieten. Zum Beispiel kann ich meine öffentliche Meeting-Planer-URL mit Freunden teilen und mich beispielsweise unter https://meetingplanner.io/username anmelden.

In Zukunft könnte ich Meeting Planner sogar erweitern, um Abonnementfunktionen für Profis anzubieten, die Termine auf ihrer öffentlichen Meeting Planner-Seite annehmen können. Ich habe jedoch andere aufregendere Ideen. Dieses Gebiet wird von anderen unternehmensorientierten Unternehmen gut abgesteckt.

Das Wellenheim reiten

Wenn Sie es noch nicht getan haben, planen Sie jetzt Ihr erstes Meeting mit Meeting Planner! Versuchen Sie, die Verknüpfungs-URL Ihres Meetings zu teilen, und bewahren Sie sie vor unserem Redaktionsgott Tom McFarlin auf.

Sie können mich auch erreichen @reifman. Ich bin immer offen für neue Feature-Ideen und Themenvorschläge für zukünftige Tutorials. Oder probieren Sie unseren Helpdesk aus und öffnen Sie einen Fehlerbericht oder ein Feature-Anfrage-Ticket.

Ein Tutorial zum Thema Crowdfunding ist ebenfalls in Arbeit. Bitte folgen Sie unserer WeFunder Meeting Planner Seite.

Bleiben Sie dran für all diese und weitere anstehende Tutorials, indem Sie die Building Your Startup With PHP-Serie ausprobieren.

ähnliche Links

Advertisement
Advertisement
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.