2016-07-11 1 views
0

Ich baue eine App, um besser zu verstehen, Restful Back-Ends mit Clients, die Anrufe zu ihm macht. Ich verwende schlank, um Routing- und Serviceanrufe zu bearbeiten. Ich bin jedoch auf zwei Dinge fest.2-teilige Verwirrung mit schlanken erholsamen Backend und Zweig

Teil 1 - Wenn restliche APIs keine Sitzungen verwenden sollen Wie behalte ich Informationen wie authentifiziert und user_id verfügbar? Es war mein Verständnis, diese Informationen in einem Cookie zu speichern, war eine schlechte Übung. Sobald ein Benutzer normal authentifiziert wurde, würde ich $_SESSION['uid'] verwenden.

Teil 2 - Dieser Teil ist für mich verwirrender. Ich benutze Twig für Front-End (kein cooler js Typ). Auf dem gleichen Server benutze ich Slim-View um den Zweig zu rendern. Aber das bedeutet, dass mein Backend JSON nicht sendet, es tut alles. Wie ist so etwas zu trennen? Lohnt es sich?

+0

P1) Eine Methode besteht darin, einen dynamischen API-Schlüssel zu erstellen, der temporär ist. Mit diesem temporären Schlüssel können Sie dann jede vom Client kommende Anfrage authentifizieren und autorisieren. P2) Sie müssen Ihr "Client" -Projekt von Ihrem "Server" -Projekt entkoppeln. Ihr Client sollte immer nur Daten (zB 'JSON') vom' Server' empfangen, Ihr 'Server' sollte sich niemals darum kümmern, wie die Daten nur zum Senden des Clients dargestellt werden. – DarkBee

+0

@DarkBee Toller Kommentar Ich hätte es als Antworten. Ein paar Fragen. P1) Wo würde der Schlüssel gespeichert? In einem Cookie? Und dann mit der Anfrage von diesem Benutzer festgelegt.Würde ich das als einen Blick von der DB für Benutzerinformationen verwenden? P2) Entkopplung ist, was ich dachte, wurde benötigt, aber es könnte immer noch mit PHP korrekt sein? Im Wesentlichen ein anderer Server, der sogar schlanke und schlanke Ansichten ausführen könnte, nehme ich an? – nerdlyist

+0

P1) Auf der Serverseite können Sie den API-Schlüssel in einer Tabelle mit einigen Feldern speichern, um zu verfolgen, wann der Schlüssel zuletzt verwendet wurde und wie lange der Schlüssel gültig ist (http://imgur.com/UKWtL3X) kann API-Schlüssel auf der Serverseite ungültig machen/Der Client kann den Schlüssel überall speichern, aber wenn Sie PHP verwenden wollen, schlage ich vor, es in der Sitzung zu speichern. P2) Der Client kann in PHP geschrieben werden. Das einzige, was ein Client nicht tun kann, ist, die Datenbank direkt zu kontaktieren. Es muss jede Information direkt vom Server anfordern – DarkBee

Antwort

1

Ersten Teil

Eine Methode ist einen dynamischen API-Schlüssel erstellen, die nur vorübergehend ist, mit dieser Temp Taste können Sie dann vom Client jeder Anforderung authentifizieren und autorisieren kommen.

Auf der Serverseite können Sie diesen temporären API-Schlüssel in einer Tabelle mit einigen Feldern speichern, um zu verfolgen, wann der Schlüssel zuletzt verwendet wurde und wie lange der Schlüssel gültig ist. Auf diese Weise können Sie API-Schlüssel auf der Serverseite

Der Kunde kann sich speichern den Schlüssel wo immer ungültig machen, aber wenn Sie gehen PHP zu verwenden, dann schlage ich es in der session


Nebenbei bemerkt zu speichern: Diese Antwort basiert auf einer API, an der ich gearbeitet habe. Das Feld static in der Tabelle api_key wird für Schlüssel verwendet, die nur zum Anmelden eines Benutzers und zum Abrufen eines dynamischen Schlüssels verwendet werden können, der dann für die Authentifizierung und Autorisierung verwendet wurde.

Dies war aufgrund der Tatsache, dass unser Client in JS geschrieben wurde und der static API-Schlüssel im Quellcode sichtbar war. So ist der Kunde hatte zunächst eine Login-Anforderung ausgeben, bevor sie eine "Legit" api Schlüssel


server side api storage

Teil zu erhalten 2

Sie benötigen eine Client-Projekt von Ihnen Server-Projekt zu entkoppeln . Ihr Client sollte nur Daten (z. B. JSON) vom Server empfangen, Ihr Server sollte sich niemals darum kümmern, wie die Daten nur zum Senden des Clients dargestellt werden.

Der Client kann in jeder Sprache geschrieben werden und kann sogar woanders gehostet werden. Das einzige, was ein Client nicht tun kann, ist, die Datenbank direkt zu kontaktieren. Es muss jede Information direkt vom Server anfordern