使用Glue定义Auth策略

时间:2018-08-20 08:25:44

标签: javascript node.js hapijs

我正在使用胶水启动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文件中的数据时,我不想手动重新启动服务器以加载修改后的数据。是否有任何插件或自定义代码可以实现这一目标?

1 个答案:

答案 0 :(得分:0)

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

  1. plugins所在的位置创建一个manifest.js文件夹。
  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');
  },
};

(身份验证设置代码来自enter link description here的Hapi文档)

这是我发现可以在manifest.js中调用类似server.auth.strategy()之类的方式。

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