Přizpůsobení ověření odeslání formuláře
Validace na straně klienta v marketingových formulářích a registracích akcí pomáhá zajistit platnost údajů předložených zákazníkem. V některých případech ale možná budete potřebovat složitější ověření. Může být například nutné porovnat odeslaná data s daty, která již ve vašem systému existují. Pro usnadnění komplexního ověřování tento článek podrobně popisuje, jak můžete vytvořit vlastní modul plug-in pro ověření odeslaných dat na back-endu a aktivaci další logiky zpracování dat.
Vytvoření modulu plug-in
Poznámka:
Tento příklad vlastního modulu plug-in ukazuje, jak vytvořit back-endové ověření pro klíč reCAPTCHA. Může sloužit jako inspirace pro váš tok ověřování. Pokud chcete integrovat reCAPTCHA do svého formuláře, můžete použít předem připravený plugin a postupovat podle tohoto průvodce.
Vytvoření projektu Visual Studio pro modul plug-in
- Otevřete Visual Studio a vytvořte nový projekt knihovny třídy pomocí .NET framework 4.6.2.
- V Průzkumníku řešení vyberte Správa balíčků NuGet a nainstalujte
Microsoft.CrmSdk.CoreAssemblies
.
Vytvoření třídy modulů plug-in
Přejmenujte
Class1.cs
naCustomValidationPlugin.cs
.Zajistěte, aby třída CustomValidationPlugin dědila z rozhraní IPlugin a přidejte metodu Execute.
public class CustomValidationPlugin : IPlugin { public void Execute(IServiceProvider serviceProvider) { } }
Chcete-li načíst kontextovou a trasovací službu, přidejte do metody execute následující kód.
public void Execute(IServiceProvider serviceProvider) { // get tracing service ITracingService tracingService = (ITracingService)serviceProvider.GetService(typeof(ITracingService)); // get plugin execution context IPluginExecutionContext context = (IPluginExecutionContext) serviceProvider.GetService(typeof(IPluginExecutionContext)); }
Přidejte tento kód, abyste načetli řetězec parametru odeslání formuláře. Je to řetězec kódovaný JSON představující pole, která uživatel odeslal ve formuláři. Tento proces načte řetězec a deserializuje ho pomocí pomocné metody deserializace a třídy FormSubmissionRequest, která je definována později. Tento kód kontroluje, zda pole fields obsahuje klíč pro g-recaptcha-response. Pokud se klíč reCAPTCHA nenajde, vrátí přeskočení ověření, protože formulář, který se zpracovává, neobsahoval prvek recaptcha.
var requestString = (string)context.InputParameters["msdynmkt_formsubmissionrequest"]; var requestObject = Deserialize<FormSubmissionRequest>(requestString); if (!requestObject.Fields.TryGetValue("g-recaptcha-response", out string recaptchaToken)) { tracingService.Trace("g-recaptcha-response was not present in form submission"); return; }
Přidejte následující kód, který se vrátí, pokud
g-recaptcha-token
je null nebo prázdná.if (String.IsNullOrEmpty(recaptchaToken)) { tracingService.Trace($"g-recaptcha-response value not found"); return; }
Přidejte následující kód, abyste ověřili token Google captcha prostřednictvím rozhraní Google API.
string url = "https://www.google.com/recaptcha/api/siteverify"; using (HttpClient client = new HttpClient()) { var content = new FormUrlEncodedContent(new Dictionary<string, string> { {"secret", "your_secret_key"}, {"response", recaptchaToken} }); try { var response = client.PostAsync(url, content).Result; if (!response.IsSuccessStatusCode) { tracingService.Trace($"Request Failed: ({response.StatusCode}){response.Content}"); return; } var responseString = response.Content.ReadAsStringAsync().Result; gRecaptchaResponse = Deserialize<GRecaptchaResponse>(responseString); var resp = new ValidateFormSubmissionResponse() { IsValid = isValid, ValidationOnlyFields = new List<string>() { "g-recaptcha-response" } }; context.OutputParameters["msdynmkt_validationresponse"] = Serialize(resp); } catch (Exception e) { tracingService.Trace($"{e.Message}"); } }
Nejprve je definována adresa URL a poté je vytvořena instance
HttpClient
. Vytvoří se objektFormUrlEncodedContent
obsahujícírecaptchaToken
získaný v předchozích krocích a tajný kód poskytnutý společností Google. Poté se odešle požadavekPOST
a zkontroluje se stavový kód, pokud není úspěšný, vrátí se. Pokud je úspěšný, deserializuje odpověď s použitím pomocné metody Deserializovat a paramteruGRecaptchaResponse
, který je definován později. Poté vytvoří nový objektValidateFormSubmissionResponse
, serializuje jej a nastaví jako hodnotu výstupního parametrumsdynmkt_validationresponse
, což je jedna služba společnosti Microsoft, kterou používá k přijetí nebo odmítnutí odeslání. Přidáním řetězceg-recaptcha-response
do seznamuValidationOnlyFields
skryjete toto pole před odesláním formuláře v uživatelském rozhraní.Přidejte následující kód k definování pomocných metod Serializace a Deserializace.
private T Deserialize<T>(string jsonString) { serializer = new DataContractJsonSerializer(typeof(T)); T result; using (MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(jsonString))) { result = (T)serializer.ReadObject(stream); } return result; } private string Serialize<T>(T obj) { string result; serializer = new DataContractJsonSerializer(typeof(T)); using (MemoryStream memoryStream = new MemoryStream()) { serializer.WriteObject(memoryStream, obj); result = Encoding.Default.GetString(memoryStream.ToArray()); } return result; }
Přidejte následující kód pro definování tříd potřebných k serializaci a deserializaci objektů řetězců JSON.
public class FormSubmissionRequest { public Dictionary<string, string> Fields { get; set; } } public class GRecaptchaResponse { public bool success { get; set; } } public class ValidateFormSubmissionResponse { public bool IsValid { get; set; } public List<string> ValidationOnlyFields { get; set; } }
Podepsání a vytvoření modulu plug-in
- Klikněte pravým tlačítkem na projekt a vyberte Vlastnosti v Průzkumníku řešení.
- Vyberte kartu Podpis a zaškrtněte políčko Podepsat sestavení.
- Vyberte možnost
<New...>
. - Zadejte název souboru klíče a zrušte výběr Chránit heslem můj soubor klíče.
- Sestavte projekt.
- Sestavení modulu plug-in
CustomValidationPlugin.dll
najdete v umístění\bin\Debug
.
Registrace modulu plug-in
- Otevře záznam typu
PluginRegistration.exe
. - Vyberte Vytvořit nové připojení.
- Zvolte Office 365.
- Vyberte volbu Přihlásit se.
- Vyberte Registrovat a poté Registrovat nové sestavení.
- V kroku 1 vyberte tlačítko (...) a vyberte knihovnu dll vytvořenou v předchozích krocích.
- Vyberte Registrovat vybrané moduly plug-in.
Krok registrace
- Ze seznamu registrovaných sestavení vyberte CustomValidationPlugin.
- Vyberte Registrovat nový krok.
- Do textového pole zprávy zadejte
msdynmkt_validateformsubmission
. - Ujistěte se, že Režim provádění je nastaven jako Synchronní.
- Ujistěte se, že je Prováděcí příkaz nastaven na
10
. - Ujistěte se, že Fáze profilace události provádění je nastavena jako Po operaci.
- Vyberte Registrovat nový krok.
Závěr
Po odeslání formuláře s atributem data-validate-submission
se spustí váš vlastní modul plug-in a ověří odpověď reCAPTCHA pomocí služeb Google. Vlastní modul plug-in se spustí po výchozím ověřovacím modulu plug-in Microsoft. Pokud ve formuláři nejsou žádná pole captcha společnosti Microsoft, modul plug-in společnosti Microsoft nastaví IsValid:false
a odeslání se nezdaří, pokud jej nepřepíšete pomocí IsValid:true
.