4

OAuth コールバック要求を処理する Web パーツがあります。

API からアクセス トークンとユーザーの ID を取得したら、それをセッション ステートに格納したいと考えています。しかし、後続のリクエストでセッションを読み取ると、「Suave.Auth」キーの値しか表示されません。

OAuth コールバックの Web パーツは次のとおりです。

path "/oauth" >=> context (fun ctx ->
        let req = ctx.request
        match (req.queryParam "code", req.queryParam "error") with
        | Choice1Of2 code, _ ->
            let id = completeOAuth code
            Authentication.authenticated Session false
            >=> Writers.setUserData "user-id" id
            >=> Redirection.redirect "/view"
        | _, Choice1Of2 error -> RequestErrors.UNAUTHORIZED error)

「user-id」値がこの後の他のリクエストのセッションにあることを確認するにはどうすればよいですか?

4

1 に答える 1

3

Writers.setUserDataリクエストの間だけ存在するマップにデータを保存します。

リクエスト間でデータを保存するには、このように使用する必要がありますstatefulForSession

let app = 
  statefulForSession >=> context (fun x ->
    match HttpContext.state x with
    | None ->
      // restarted server without keeping the key; set key manually?
      let msg = "Server Key, Cookie Serialiser reset, or Cookie Data Corrupt, "
      + "if you refresh the browser page, you'll have gotten a new cookie."
      OK msg
    | Some store ->
      match store.get "counter" with
      | Some y ->
        store.set "counter" (y + 1) >=> OK (sprintf "Hello %d time(s)" (y + 1))
      | None ->
        store.set "counter" 1 >=> OK "First time")
于 2016-09-27T00:37:49.227 に答える