Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/466.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用Glue定义Auth策略_Javascript_Node.js_Hapijs - Fatal编程技术网

Javascript 使用Glue定义Auth策略

Javascript 使用Glue定义Auth策略,javascript,node.js,hapijs,Javascript,Node.js,Hapijs,我正在使用glue来启动hapi服务器,所以我给了json对象连接和注册的详细信息 我有10条路由,我需要对所有10条路由使用身份验证策略,因此遵循以下步骤 1) 我已经注册了xyz自定义身份验证插件 2) 定义了策略server.auth.strategy('xyz','xyz',{}) 3) 在每个路由级别,我都启用了auth策略 auth: { strategies: ['xyz'], } 我怎样才能在下面一行给配置对象本身加上胶水呢 server.auth.strategy(

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

我有10条路由,我需要对所有10条路由使用身份验证策略,因此遵循以下步骤

1) 我已经注册了xyz自定义身份验证插件

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

3) 在每个路由级别,我都启用了auth策略

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

  • manifest.js
    所在的位置创建一个
    plugins
    文件夹
  • 创建一个文件
    plugins/auth.js
    (在本例中)。在这里,您将有一个访问服务器对象的注册回调,您可以进行超出Glue声明性功能的设置调用
  • 将指向插件文件的插件项添加到
    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文档)

    这就是我找到的方法,我可以从manifest.js调用类似于
    server.auth.strategy()
    的东西


    注意:Auth不是这种技术的一个很好的例子,因为在
    lib/Auth/strategies

    中有一个用于Auth策略的特殊文件夹。您可以使用nodemon自动重新启动服务器。我回应了主要问题。auth策略设置如何与Glue集成?