在使用 Hapi 框架构建 web 应用程序时,有时可能会遇到如下错误:
TypeError: Strinfigied secret must be a buffer
这个错误通常发生在使用 hapi-auth-cookie
插件时,原因是插件需要传入一个 Buffer 格式的密钥作为参数,但传入的是字符串。
本文将介绍如何解决这个错误,以及如何正确使用 hapi-auth-cookie
插件。
解决 TypeError: Strinfigied secret must be a buffer 错误
要解决这个错误,最简单的方式是将传入的字符串使用 Buffer.from()
方法转换为 Buffer 格式。
-- -------------------- ---- ------- ----- ---- - ---------------------- ----- ------ - --- ------------- ----- ---- --- ----- ---- - ----- -- -- - ----- ----------------------------------------- ------------------------------- --------- - ------- - --------- ----------------- ----------- --------- ----- -- ----------- --------- ----------- ---- --- -------------- ------- ------ ----- ---- -------- --------- -- -- - ------ ------ -------- - --- ----- --------------- ------------------- ------- --- --------------------- -- -------
在上面的示例代码中,我们使用 Buffer.from()
方法将字符串 'some password'
转换成了 Buffer,然后将其作为 cookie.password
的值传递给了 hapi-auth-cookie
插件。
这样就可以解决这个错误了。但是,正确使用 hapi-auth-cookie
插件还有一些其他注意事项。
正确使用 hapi-auth-cookie 插件
当使用 hapi-auth-cookie
插件时,我们需要定义一些路由和策略。
首先,在插件的注册选项中启用 cookie:
await server.register(require('@hapi/cookie'));
然后,定义一个策略。这个策略用于验证用户的访问授权。如果用户没有授权,它将重定向到登录页面。
server.auth.strategy('session', 'cookie', { cookie: { password: Buffer.from('some password'), isSecure: false }, redirectTo: '/login', appendNext: true });
在上面的示例中,我们使用 cookie
选项传递了一个密码,该密码将用于安全地加密和解密 cookie 数据。我们还指定了 redirectTo
选项,以指示如果用户没有授权,则应将其重定向到 /login
页面。appendNext
选项通过在URL中添加查询字符串参数 next
来允许我们指定一个回调URL,该回调URL将在用户成功登录后被调用。
最后,定义一些路由,这些路由将需要用户访问授权。可以使用 config.auth
选项将策略应用到路由上。
-- -------------------- ---- ------- -------------- ------- ------ ----- ----------- ------- - ----- ---------- -------- --------- -- -- - ------ ------- - - ------------------------------ - - ---
在上面的示例中, only authenticated users are permited to access the /private
URL。我们使用 auth
选项指定了使用我们定义的名为 session
的策略来验证用户的访问授权。如果验证失败,用户将被重定向到 /login
页面。
总结
在使用 Hapi 框架构建 web 应用程序时,使用 hapi-auth-cookie
插件进行用户访问授权验证时可能会遇到错误 TypeError: Strinfigied secret must be a buffer
。我们可以使用 Buffer.from()
方法将传递给插件的字符串转换为 Buffer 来解决这个错误。此外,我们还需要定义一些路由和策略,确保正确使用 hapi-auth-cookie
插件进行用户访问授权验证。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/649a823c48841e9894767745