2014-10-16 60 views
0

我實現了認證行動之前的作品,並把它在每一個方法開始在我的控制器 def addFile(itemId: Long) = AuthenticatedAction.async(FSBodyParser(itemId)){ request => ...BodyParser認證行動

然後我根據MultipartFormData

def FSBodyParser(itemId:Long): BodyParser[MultipartFormData[Future[BaseFileInfo]]] = { 
    multipartFormData(Multipart.handleFilePart { 
     case Multipart.FileInfo(partName, filename, contentType) => 
     //println(s"FileInfo($partName, $filename, $contentType)") 
     getIteratee(1, itemId, filename, contentType) 
    }) 
    } 
實現我自己的身體解析器

我發現我的文件首先上傳,然後驗證操作檢查用戶是否有效。我想檢查用戶身份驗證的拳頭,然後才保存上傳的文件。

你有什麼想法如何實現這個最好的方式?可能使用Play過濾器進行身份驗證?

回答

0

我如下(使用EssentialAction)

def authenticate(): Future[Option[Long]] = { 
    // here we should pass correct user id 
    Future.successful(Some(421)) 
    } 

    def Authenticated[A](action: Action[A]) = EssentialAction{ rh => 
    Iteratee.flatten(authenticate() map{ 
     case Some(userId) => action(rh) 
     case None => Done(Results.Unauthorized) 
    }) 
    } 

//this is method of my service 
//Authenticated is called before FSBodyParser starts working 
def addFile(itemId: Long) = Authenticated{ 
    Action.async(FSBodyParser(itemId)){ requestHeaders => 
     ItemRepository.addFile(1, itemId, null) map(fileId => Ok) 
    } 
    } 
實現了它