2016-06-21 3 views
0

Ich entwickle eine App, die eine Server-Seite mit Play Framework Scala und eine Client-Seite AngularJS hat.Auth0 entkoppelt Client-Seite/Server-Seite

Ich möchte die Authentifizierung nur auf der Serverseite verwalten, da ich sowohl die API als auch die Anwendung selbst sichern muss und ich möchte die Sitzungen auf meinem Server "zentralisiert" halten.

Da ich jedoch nicht das Play Framework-Templat verwende (um meine Client-Seite und meine Server-Seite unabhängig zu halten), kann ich die Benutzerprofil-Informationen nicht an die Client-Seite weitergeben, wie es in den Beispielen gemacht wird.

Ich habe versucht, meinen Cache und meine Cookie-Schlüssel auf meiner Angular-Vorlage aufzulisten, aber ich kann anscheinend nichts finden.

Gibt es eine Möglichkeit, die Sitzungsinformationen mit Angular zu greifen? die von Play Framework angeforderte und verwaltete Sitzung haben? (Ich kann es nicht überall auf der docs)

Hier ist, wie ich meine Angular Client-Seite Titelseite machen (Play Rahmen nur, dass die API-Routing und diese Titelseite Routing)

def frontPage() = AuthenticatedAction { 
    request => 
     val idToken = request.session.get("idToken").get 
     val profile = cache.get[JsValue](idToken + "profile").get 
     Ok.sendFile(content = new File("./public/layout.html"), inline = true).as("text/html") 
    } 

Hier ist, wie es erfolgt beispielsweise auf der docs:

def index = AuthenticatedAction { request => 
    val idToken = request.session.get("idToken").get 
    val profile = Cache.getAs[JsValue](idToken + "profile").get 
    Ok(views.html.user(profile)) 
} 

ich brauchen würde, dass „Profil“ zu vermitteln meiner Vorlage, aber ich will nicht scala hTML-Templates haben: ich möchte mit reinen Winkelschablonen halten zu halten Meine Client/Server-Seiten-Independents (nur über eine API kommunizieren)

EDIT 21/06/2016: Ich habe keine Möglichkeit gefunden, meine Sitzungsinformationen direkt von Angular abzurufen, aber ich konnte sie durch Erweitern meiner API zurückgeben, und mir gefällt diese Lösung besser! siehe https://stackoverflow.com/a/37942787/4884034

Antwort

0

So, vielen Dank für zu @ Simon mir zeigen in die richtige Richtung.

Ich bin jetzt eine Sitzung nach dem Login zu senden:

Ok.sendFile(content = new File("./public/layout.html"), inline = true).as("text/html").withSession("connected" -> profile.toString()) 

ich nicht in der Lage war, die Sitzung direkt von Angular zu bekommen, was so habe ich stattdessen ich meine API aktualisiert, um eine Aktion zu haben, die Session Rückkehr Informationen:

def getSession = Action { request => 
    request.session.get("connected").map { 
     user => Ok(Json.parse(user)) 
    }.getOrElse { 
     Unauthorized("Oops, you are not connected") 
    } 
    } 

(in Routen:

## USER SESSION 
GET  /api/session      controllers.Callback.getSession 

)

So kann ich die API aufrufen, um meine Sitzungsinformationen auf meiner Clientseite abzurufen, sei es Angular, eine mobile App oder eine andere Anwendung, die JSON liest.

Beispiel von JSON zurückgegeben:

{"email":"[email protected]","email_verified":false,"clientID":"MvM2wHRX2rMKp5s3UXXXXXXXX","updated_at":"2016-06-21T10:59:49.730Z","picture":"https://s.gravatar.com/avatar/e91d5ae3XXXXXXXXXXX?s=480&r=pg&d=https%3A%2F%2Fcdn.auth0.com%2Favatars%2Fda.png","user_id":"auth0|5XXXXXXXXX47b1b07d","name":"[email protected]","nickname":"XXX","identities":[{"user_id":"5767bea338XXXXXX","provider":"auth0","connection":"Username-Password-Authentication","isSocial":false}],"created_at":"2016-06-20T10:00:03.921Z","sub":"auth0|5767beXXXXXXX"} 

Ich hoffe, es wird dazu beitragen, jemand eine entkoppelten Play-Framework-Server-Seite von seiner Client-Seite zu haben versucht!

1

Sie machen können es auf der Client-Seite mit:

Ok 
    .sendFile(content = new File("./public/layout.html"), inline = true).as("text/html") 
    .withSession(session) 

oder .withCookies(cookie)

+0

Also habe ich beide Optionen ausprobiert, mit der ersten finde ich noch nichts auf der Angular, wenn ich $ cookies.getAll(), für withCookies bekomme ich eine Ausführungsausnahme Cookie-Wert enthält ein ungültiges Zeichen: ".Session scheint eine gute Lösung zu sein, aber wo wird sie gespeichert? – Daniel

Verwandte Themen