我正在使用 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 时,我想出了一个通用的解决方法。
- 在
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 文档 enter link description here)
这是我发现可以从 manifest.js 中调用诸如 server.auth.strategy()
之类的东西的方法。
注意:Auth 不是此技术的一个很好的例子,因为在 lib/auth/strategies
中有一个用于 auth 策略的特殊文件夹。
关于javascript - 使用 Glue 定义 Auth 策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51926739/