javascript - 使用 Glue 定义 Auth 策略

标签 javascript node.js hapi.js

我正在使用 glue 启动 hapi 服务器,所以我为 json 对象提供了连接和注册详细信息。

我有 10 条路由,我需要对所有 10 条路由使用身份验证策略,所以按照以下步骤操作

1) 我已经注册了xyz自定义授权插件

2) 定义策略server.auth.strategy('xyz', 'xyz', { });

3) 在每个路由级别我都启用身份验证策略

auth: {
     strategies: ['xyz'],
}

我怎样才能给出下面的行来粘合配置对象本身。

server.auth.strategy('xyz', 'xyz', { });



Glue.compose(ServerConfig, { relativeTo: baseDir }, (err, server) => {
        internals.server = server;

})

还有一个问题是,在这一行 server.auth.strategy('xyz', 'xyz', { from json file}); 我正在从配置文件中读取 JSON 数据.当我更改此 JSON 文件中的数据时,我不想手动重新启动服务器以加载修改后的数据。是否有任何插件或自定义代码来实现此目的?

最佳答案

当您想进行 Glue 不直接支持 (AFAIK) 的设置并且您也不想继续添加到 index.js 时,我想出了一个通用的解决方法。

  1. manifest.js 所在的位置创建一个 plugins 文件夹。
  2. 创建文件 plugins/auth.js(在本例中)。在这里,您将拥有一个可以访问服务器对象的注册回调,并且您可以进行超出 Glue 声明式操作的设置调用。
  3. 将插件项添加到指向您的插件文件的 manifest.js

在 manifest.js 中:

register: {
  plugins: [
    {
      plugin: './plugins/auth',
    },
  ]
}

在 plugins/auth.js 中:

module.exports = {
  name: 'auth',
  async register (server) {
    await server.register([
      require('@hapi/cookie'),
    ]);

    server.auth.strategy('session', 'cookie', {
      cookie: {
        name: 'sid-example',
        password: '!wsYhFA*C2U6nz=Bu^%A@^F#SF3&kSR6',
        isSecure: false
      },
      redirectTo: '/login',
      validateFunc: async (request, session) => {

        const account = await users.find(
          (user) => (user.id === session.id)
        );

        if (!account) {
          return { valid: false };
        }

        return { valid: true, credentials: account };
      }
    });

    server.auth.default('session');
  },
};

(授权设置代码来自 Hapi 文档 enter link description here)

这是我发现可以从 manifest.js 中调用诸如 server.auth.strategy() 之类的东西的方法。

注意:Auth 不是此技术的一个很好的例子,因为在 lib/auth/strategies 中有一个用于 auth 策略的特殊文件夹。

关于javascript - 使用 Glue 定义 Auth 策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51926739/

相关文章:

javascript - 加载后淡入背景图像(无 jquery),同时仍使用媒体查询替换不同屏幕尺寸的图像

javascript - 使用 JavaScript 检查浏览器是否支持 css3 和/或 HTML5 属性

node.js - 开发时绕过 Storm 路径

mysql - 序列化原始 mysql 查询返回空字段

node.js - 并发请求覆盖 ​​Redis 中的数据

javascript - WebRTC - RTCPeerConnection.localDescription 在 Firefox 中返回 null,但在 Chrome 中正常工作

javascript - 故事书 4 和 webpack.config?

node.js - 您应该/可以运行在 Azure 上运行的 Node-OPCUA 服务器吗?

javascript - 乔伊 :allow null values in array

node.js - 验证错误: child "password" fails because ["password" is required]