javascript 使用加密API在react中生成UUID

icnyk63a  于 2023-02-28  发布在  Java
关注(0)|答案(3)|浏览(507)

根据MDM(https://developer.mozilla.org/en-US/docs/Web/API/Crypto/randomUUID),大多数现代浏览器支持javascript原生加密API,该api支持以前的node-js加密标准。
根据plain js中的这篇文章,我可以通过以下方式创建uuid

crypto.randomUUID()

有什么方法可以在react中使用这个接口吗?因为crypto似乎在react中引用了一个完全不同的对象。
ps.我知道UUID包的存在,也知道这是生成UUID的常用方法,我只是好奇。

7rtdyuoh

7rtdyuoh1#

(2023年的现代解决方案)

  1. js在服务器上预先呈现React页面组件(在TypeScript中表示为NextPage类型),因此需要添加import crypto from 'crypto'; crypto.randomUUID()以在服务器上生成唯一的id。
    1.在HTML页面作为预呈现的结果返回到浏览器后,您需要使用window.crypto.randomUUID(),因为crypto.randomUUID()来自服务器环境中的Node.js包,而不是浏览器中的。U可以在代码中添加以下检查:
// The following Node.js package is imported on the server-side 
// and not available in the browser
import nodeCrypto from 'crypto';

// Use the web browser Crypto API if you're on the client, 
// otherwise use the Node.js Crypto API on the server
typeof window !== 'undefined' ? window.crypto.randomUUID() : nodeCrypto.randomUUID()

请参阅Next.js文档中的安全访问Web API以了解更多信息。

9w11ddsr

9w11ddsr2#

我想你是对的,React中的crypto包是不同的,要使用NodeJs中的crypto包,你可以调用:
window.crypto
我把它放在if中以确保它只在浏览器中呈现。

if (window !== undefined) {
    console.log('randomUUID', window.crypto.randomUUID());
}

import crypto from 'crypto';

console.log('crypto.randomUUID()', crypto.randomBytes(16).toString('hex'));
jtjikinw

jtjikinw3#

window.crypto.randomUUID()是好的。但是请注意crypto.randomUUID()只在安全上下文(HTTPS)中可用。当您在HTTP站点上时,它将导致TypeError: window.crypto.randomUUID is not a function
所以应该是这样的:

if (typeof window !== "undefined" && typeof window.crypto.randomUUID === "function") {
    console.log('randomUUID', window.crypto.randomUUID());
}

相关问题