Auth0's useUser()尝试从/api/auth/me
获取登录用户,/api/auth/me
调用handleAuth()
,handleAuth()
启动Auth 0(创建sessionCache
示例等)并调用profileHandler(req, res)。
在profileHandler
中,我们可以看到对sessionCache.isAuthenticated(req, res)
的调用,sessionCache.isAuthenticated(req, res)
反过来检查sessionCache
示例中是否存在以前的会话条目(密钥:req对象,值:包含用户信息、access_token、id_token等的加密对象)。
由于每个API调用,即每个handleAuth()
的调用,无论是来自/api/auth/me
,/api/auth/login
还是其他,都是一个单独的无服务器函数调用,那么profileHandler
(/api/auth/me
)真的会在sessionCache中找到一个条目吗?
我知道我们在登录时添加了一个条目(在callbackHandler
中),但我不明白缓存值如何在两个单独的无服务器函数调用之间保持不变。
nextjs-auth 0在文档中声明:
默认情况下,会话是无状态的,并存储在加密的cookie中。但是如果你想要一个有状态的会话,你可以提供一个带有get
,set
和destroy
方法的存储来将会话存储在服务器上。
我们知道它是无状态的。
1条答案
按热度按时间relj7zay1#
我不明白缓存值如何在两个单独的无服务器函数调用之间保持。
会话存储在一个cookie中,每个单独的Serverless Function调用都会读取该cookie并填充
sessionCache
(它将会话存储在每个请求的WeakMap中)。sessionCache
只是为了确保您可以在单个请求的生命周期中多次访问会话,而不必每次都读取/解密cookie。