2016-05-14 5 views
5

基本認証サーバント

type SubApi = API1 :<|> API2 :<|> API3 
type API = BasicAuth "foo-realm" AuthData :> SubApi 

で保護されたAPIを使用すると、カスタムリーダーモナドで認証を使用すると、タイプAuthData -> Handler aのハンドラをサポートしています。

handler1 :: Request1 -> AuthMonad Response 
handler2 :: Request2 -> AuthMonad Response 

コンテキストAuthDataから部分的に構成されReaderTあるAuthMonad、で実行:

私はハンドラのセットを有します。 enterAuthMonad :~> Handlerを使用して、私はタイプAuthData -> AuthMonadServer API支援ハンドラを得るが、私が本当にしたいことはrunReaderTへの環境としてAuthData引数を使用していることができます。

これを行う方法を理解するには、enterというタイプの魔法を使用するには十分ではありません。何か案は?

+2

はそれが役に立つかもしれません上記の場合 私は自然な変換を作成するだろう機能を作りましたAuthMonadの実際の宣言が含まれているとします。また、あなたは何と言っているのですか?そのタイプを提供しない場合は、少なくともそれが入っているパッケージへのリンクを提供してください。 – Kwarrtz

+0

私はタグに加えてボディに言及すべきだったと思いますが、これは[haskell-servant ](https://hackage.haskell.org/package/servant) – ewestern

+0

私は2番目のクワルツ:「AuthMonad」についての情報がなければ答えは難しいと思います。定義を知らなくても必要な 'Nat'変換を書くのは難しいです。 – hao

答えて

0

私はこれをぶら下げて残しました。

ほとんどの人は、この1つを過度に考えていました。答えはかなり明白です。

enterAuth :: AuthData -> AuthMonad :~> Handler 

SERVERT構築するとき、私はその後、使用:

protectedServer :: AuthData -> ServerT ProtectedAPI Handler 
protectedServer ad = enter (enterAuth ad) protectedServer' 

genAuthServerContext :: Context (AuthHandler Request AuthData ': '[]) 
関連する問題