2016-06-21 172 views
0

我正在開發一個具有使用Play Framework Scala的服務器端和客戶端AngularJS的應用程序。Auth0解耦客戶端/服務器端

我想僅在服務器端進行身份驗證管理,因爲我必須同時保護API和應用程序本身,並且要保持會話「集中」在我的服務器上。

但是由於我沒有使用Play Framework視圖模板(爲了讓我的客戶端和我的服務器端獨立),我無法像在示例中那樣將用戶配置文件信息傳遞到客戶端。

我試圖在我的Angular模板上列出我的緩存和我的Cookie鍵,但我似乎無法找到任何東西。

有沒有什麼辦法可以使用Angular獲取會話信息?由Play Framework請求和管理會話? (我不能在文檔的任何地方找到它)

這是我如何使我的角客戶端頭版(播放框架只做API的路由與此頭版路由)

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") 
    } 

這是怎麼了在文檔例子做:

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

我需要獲得「輪廓」跨越我的模板,但我不希望有斯卡拉HTML模板:我想用純角模板保持保持我的客戶端/服務器端獨立(僅通過API進行通信)

編輯21/06/2016:我沒有找到直接從Angular獲取會話信息的方法,但是我能夠通過擴展API來返回它,並且我更喜歡該解決方案!看到https://stackoverflow.com/a/37942787/4884034

回答

0

所以,感謝@Simon指着我在正確的方向。

我現在在登錄後發送會話:

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

我是不是能夠直接從角獲取會話,所以我做了什麼,而不是被我更新了我的API有一個動作返回會議信息:

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

(在路線:

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

這樣我可以調用API來獲取我的客戶端的會話信息,可能是Angular,移動應用程序或任何類型的讀取JSON的應用程序。 JSON的

實例返回:

{"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"} 

我希望這將幫助任何人試圖從它的客戶端有一個去耦播放框架服務器端!

1

你可以用它呈現到客戶端:

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

.withCookies(cookie)

+0

所以,我嘗試了你的兩個選項,第一個我仍然沒有找到Angular上的任何東西,當我做$ cookies.getAll()時,對於withCookies我得到一個執行異常Cookie值包含一個無效的char: 「withSession似乎是一個很好的解決方案,但它存儲在哪裏? – Daniel