← Cloudflare Zaraz / zaraz / advanced
Context Enricher
Zaraz Context Enricher je nástroj pro úpravu nebo obohacení context která je používána v rámci Zaraz prostřednictvím Cloudflare Worker. Context Enricher vám umožňuje přístup ke klientským a systémovým proměnným.
Vytvoření Workeru
Chcete-li používat Context Enricher, musíte nejprve vytvořit nový Cloudflare Worker. Můžete to udělat přes Cloudflare dashboard nebo pomocí Wrangler.
Chcete-li vytvořit nový Worker v Cloudflare dashboardu:
-
V dashboardu Cloudflare přejděte na Workers & Pages stránce.
Přejděte na Workers & Pages ↗ -
Vyberte Vytvoření aplikace.
-
Zadejte název svého Workeru a vyberte Nasadit.
-
Vyberte Upravit kód.
Právě jste vytvořili základní Worker, který odpovídá textem "Hello world." Aby tento Worker fungoval jako Context Enricher, musíte upravit kód tak, aby vracel kontext zpět:
export default {
async fetch(request, env, ctx) {
const { system, client } = await request.json();
// Here goes your modification to the system or client objects.
/*
For example, to change the country to a fictitious "Pirate's Island" ("PI"), use:
system.device.location.country = 'PI';
*/
return new Response(JSON.stringify({ system, client }));
},
};Další, podrobnější příklady různých případů užití najdete v pokračování textu, případně si přečtěte Zaraz Context.
Konfigurace Context Enricher
Jakmile je váš Worker publikovaný, můžete ho vybrat v nastavení Zaraz:
-
V dashboardu Cloudflare přejděte na Nastavení stránce.
Přejděte na Nastavení ↗ -
Vyberte svůj Context Enricher Worker.
-
Uložte svá nastavení.
Váš Context Enricher se nyní bude spouštět u všech požadavků Zaraz v dané zóně.
Příklad Context Enricher
Přidání libovolných informací pomocí API
Pomocí Context Enricher můžete do svého kontextu přidávat další informace. Můžete například pomocí API zjistit aktuální počasí v lokalitě uživatele a přidat ho do kontextu.
function getWeatherForLocation({ client, system }) {
// Get the location from the context.
const { city } = system.device.location;
// Get the weather from an API.
const response = await fetch(
`https://wttr.in/${encodeURIComponents(city)}?format=j1`
).then((response) => response.json());
// Add the weather to the context.
client.weather = weather;
return { client, system };
}
export default {
async fetch(request, env, ctx) {
const { system, client } = await request.json();
// Add the weather to the context.
const newContext = getWeatherForLocation({ system, client });
// Return as JSON
return new Response(JSON.stringify(newContext));
},
};Nyní můžete vlastnost weather použít kdekoli v Zaraz výběrem Track Property z pole atributů a zadáním weather.
Maskování citlivých údajů, jako jsou e-mailové adresy
Předpokládejme, že chceme redigovat citlivé informace, například e-maily. Nahradíme proto všechny výskyty e-mailových adres v celém kontextu. Mějte na paměti, že jde pouze o příklad, který nemusí odpovídat všem okrajovým situacím nebo případům užití.
Pro zjednodušení tohoto příkladu nahradíme všechny řetězce, které obsahují @ symbol:
function redactEmailAddressesFromObject(context) {
// Loop through all keys of the object.
for (const key in context) {
// Check if the value is a string.
if (typeof context[key] === "string") {
// Check if the string contains an @ symbol.
if (context[key].includes("@")) {
// Replace the string with a redacted version.
context[key] = "[email protected]";
}
} else if (typeof context[key] === "object") {
// Recursively call this function to redact the object.
context[key] = redactEmailAddressesFromObject(context[key]);
}
}
return context;
}
export default {
async fetch(request, env, ctx) {
const { system, client } = await request.json();
// Redact email addresses from the context.
const newContext = redactEmailAddressesFromObject({ system, client });
// Return as JSON
return new Response(JSON.stringify(newContext));
},
};