我正在使用胶水启动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文件中的数据时,我不想手动重新启动服务器以加载修改后的数据。是否有任何插件或自定义代码可以实现这一目标?
答案 0 :(得分:0)
我想出了一个通用的解决方法,当您要进行设置时,Glue不直接支持(AFAIK),并且您也不想继续添加到index.js。
plugins
所在的位置创建一个manifest.js
文件夹。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');
},
};
(身份验证设置代码来自enter link description here的Hapi文档)
这是我发现可以在manifest.js中调用类似server.auth.strategy()
之类的方式。
注意:Auth并不是该技术的一个很好的例子,因为lib/auth/strategies
中有一个用于身份验证策略的特殊文件夹。