gpt4 book ai didi

f# - 如何在 Suave 用户状态中存储数据?

转载 作者:行者123 更新时间:2023-12-03 23:57:47 25 4
gpt4 key购买 nike

我有一个处理 OAuth 回调请求的 Web 部件。

从 API 获取访问 token 和用户 ID 后,我想将其存储在 session 状态中。但是在后续请求中读取 session 时,我只看到“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”值在此之后的其他请求的 session 中?

最佳答案

Writers.setUserData将数据存储在仅在请求期间存在的 map 中。

要跨请求存储数据,您需要使用 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")

关于f# - 如何在 Suave 用户状态中存储数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39670921/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com