Node.js 如何为条带状态生成随机哈希

Node.js 如何为条带状态生成随机哈希,node.js,stripe-payments,stripe-connect,Node.js,Stripe Payments,Stripe Connect,根据Stripe网站上的建议: CSRF保护 要防止CSRF攻击,请使用状态参数,将唯一令牌作为值传递。我们将包括重定向回时您给我们的状态。 我想在我的URL中包含一个state参数,以保护我的应用程序。我想现在对我来说已经足够清楚了,state参数应该是唯一的、安全的,并且只是一系列字符,这些字符将通知我的应用程序哪个用户刚刚被Stripe connect授权。我将在数据库中存储该值,当用户返回时,我将知道他们是谁,并能够将他们引导到正确的位置。那么我的下一个问题。如何创建唯一的令牌?我有一个

根据Stripe网站上的建议:

CSRF保护
要防止CSRF攻击,请使用状态参数,将唯一令牌作为值传递。我们将包括重定向回时您给我们的状态。

我想在我的URL中包含一个
state
参数,以保护我的应用程序。我想现在对我来说已经足够清楚了,
state
参数应该是唯一的、安全的,并且只是一系列字符,这些字符将通知我的应用程序哪个用户刚刚被Stripe connect授权。我将在数据库中存储该值,当用户返回时,我将知道他们是谁,并能够将他们引导到正确的位置。那么我的下一个问题。如何创建唯一的令牌?我有一个唯一的令牌,它是从OAuth提供者为我的应用程序的一个单独部分返回的,但我没有将它保存在数据库中

是否有推荐的方法在我的节点服务器上创建这种类型的唯一令牌?它应该是
md5
还是
sh1
?我是否应该将用户名和随机字符串保存在数据库中,就好像它是一个salt和hash一样

require('crypto')。createHash('md5')。update(字符串\u到\u BE\u散列‌​ED+盐)。摘要(“十六进制”)


我想得太多了吗?

您可能希望使用功能齐全的CSRF中间件,例如管理CSRF令牌,但如果您想自己生成令牌,任何“足够随机”的值都应该可以。像这样的事情应该可以做到:

const crypto = require('crypto');
var token = crypto.randomBytes(64).toString('hex');