2017-02-22 3 views
1

Je suis en train de composer une authentification de base avec une autre action:la version Async de AuthenticatedBuilder en jeu 2

def findByNameSecure(username: String) = Authenticated { _ => 
    val cursor: Cursor[JsObject] = persons. 
     find(Json.obj("userdetails.username" -> username)). 
     cursor[JsObject](ReadPreference.primary) 
    val res = cursor.collect[List]().map { persons => 
     Ok(Json.toJson(persons)) 
    } .recover { 
     case _ => BadRequest(Json.parse("{'error': 'failed to read from db'}")) 
    } 
    Await.result(res, 10.seconds) 
    } 

Route:

GET  /secure/user/findbyname  controllers.UserController.findByNameSecure(username: String) 

Cela fonctionne comme prévu. Ce qui est dérangeant, c'est que j'ai utilisé Await.result qui bloque. Comment puis-je composer une version asynchrone de ce type d'authentification? J'utilise jouer 2.4.

+0

Pourquoi vous ne pas écrire simple exemple de votre code que tout le monde peut compiler et peut-être courir? Avez-vous essayé - 'def findByNameSecure (nom d'utilisateur: String) = Authenticated.async {_ =>' – EnverOsmanov

+0

Désolé, je ne suis pas en mesure de montrer l'ensemble du projet. 'Authenticated.async' fonctionne bien. Merci! Je serais heureux de l'accepter si vous pouviez l'écrire comme une réponse. – qed

+0

Votre logique métier n'est pas connectée à une question, vous pouvez donc simplement la supprimer. Exemple: https://scastie.scala-lang.org/3821 Aussi simple que vous écrivez autant d'aide que vous obtiendrez. – EnverOsmanov

Répondre

3

AuthendicatedBuilder est enfant de ActionBuilder. Donc, je suppose que sa méthode async devrait fonctionner aussi bien.

Exemple d'utilisation:

def findByNameSecure(username: String) = Authenticated.async { _ =>