2017-03-11 9 views
0

私はUserAwareActionとCacheを組み合わせようとしています。私はCacheBeforeSilhouetteを得ることができますが、それ以外の方法はありませんか?誰でも私にこれを行う方法のヒントを与えることができますか?Silhouette-4.0.X UserAwareActionとキャッシュアクションを組み合わせるにはどうすればいいですか?

問題はplay.api.cache.Cached.applyfunctionがCachedBuilderwhichをパラメータとしてEssentialActionを必要と返すこと最初です:

@Singleton 
class MessageController @Inject() (
    implicit val env: Environment[DefaultEnv], 
    silhouette: Silhouette[DefaultEnv], 
    cache: CacheApi, 
    cached: play.api.cache.Cached) 
    extends Controller with I18nSupport { 

... 

    def testOnlySilhouette = silhouette.UserAwareAction { request => 
    Ok("hi") 
    } 
    def testOnlyCache = cached("homePage") { 
    Action { 
     Ok("Hello world") 
    } 
    } 
    def testCacheOfSilhouette = cached("homePage") { 
    silhouette.UserAwareAction { request => 
     Ok("hi") 
    } 
    } 
    def testSilhouetteOfCache = 
    silhouette.UserAwareAction { request => 
     cached("homePage") { 
     val res:Result = Ok("hi") 
     res //type mismatch; found : play.api.mvc.Result required: play.api.mvc.EssentialAction 
     } 
    } 

答えて

0

クリスチャンKAPSの@akkieはギッターに答えました。したがって、常に次のように記述する必要があります。

Cached("some-key") { 
    Action { 
    Ok("") 
    } 
} 

第2の問題は、要求タイプに互換性がないことです。 PlayクラスにはRequest [B]が必要ですが、SilhouetteはSecuredRequest [E、B]を生成します。ビット手仕事を使用すると、それが仕事を得ることができます:

def testSilhouetteOfCache = 
    silhouette.SecuredAction.async { securedRequest => 
    cached("some-key") { 
     Action { 
     Ok("") 
     } 
    }.apply(securedRequest.request).run() 
    } 

あなたは暗黙のヴァルmaterializerを必要とする:Materializerは

を注入し
関連する問題