小编Too*_*ury的帖子

如何在 Typescript 中创建符合特定类型的 const 对象

我正在寻找以下更好的解决方案......我需要这样做:

const FRUIT_PROPERTIES = {
   "apple": { color: "red" },
   "banana": { color: "yellow" }
} as const

const myFavoriteFruitColor = FRUIT_PROPERTIES.apple.color
Run Code Online (Sandbox Code Playgroud)

这很好,但我也希望 FRUIT_PROPERTIES 对象符合这样的类型:

type FruitEnum = Record<string, { color: string }>

const FRUIT_PROPERTIES: FruitEnum = {
   "apple": { color: "red" },
   "banana": { color: "yellow" }
} as const
Run Code Online (Sandbox Code Playgroud)

但这样我就失去了“苹果”和“香蕉”键的原始推断类型和自动完成功能。

所以我通过执行以下操作解决了这个问题

type FruitEnum = Record<string, { color: string }>;

const validateFruitEnum = <TParam extends FruitEnum>(param: TParam) => {
   return param;
};

const FRUIT_PROPERTIES = validateFruitEnum({
   apple: { …
Run Code Online (Sandbox Code Playgroud)

typescript

10
推荐指数
1
解决办法
1145
查看次数

Firebase + Nextjs - 用户会话共享

问题:

我需要在我的应用程序的服务器端发出数据库请求,该请求是使用Next.js 和 Firebase(我知道不是最好的组合)编写的,以便为客户端准备初始数据。

问题是我想使用在服务器客户端运行的相同代码(使用服务器上的 firebase 客户端 SDK 来处理数据库请求)。

但是我不知道如何与服务器端共享用户会话。

服务器没有登录客户端 SDK 的用户,因此即使客户端有权访问它们(它知道当前用户),对于受限资源也会返回 403

我尝试了以下方法:

自定义令牌破解(不能使用 ID 令牌唱歌)

目前我必须将用户 ID 令牌添加到 cookie。这样令牌被附加到每个后续请求,服务器端可以生成一个自定义令牌(我无法使用 ID 令牌登录),然后我可以通过它在应用程序的服务器端以及客户端(哪个如果启用持久性,则已登录)。

这是一个巨大的矫枉过正,我应该能够以与客户端相同的方式登录服务器,因为它实际上就像一个客户端本身(它不执行任何特权操作)。

在服务器上第二次登录

其他解决方案是通过 cookie(安全风险)发送凭据,然后第二次登录服务器。这不适用于一次性身份验证会话(如一次性电子邮件链接,因为服务器第二次有效登录)。

官方示例没有帮助

在 Next.js 存储库中有一个关于 firbease auth 的示例,它现在已经注释掉了服务器端数据获取。即使它没有被注释掉,它也不会检查用户权限,如果找到用户,它会直接获取数据https://github.com/zeit/next.js/tree/canary/examples/with-firebase -验证

firebase reactjs firebase-authentication next.js

6
推荐指数
1
解决办法
776
查看次数