Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,19 @@



# Version 11.8.0

**Release Date:** February 06, 2026

## Enhancements

- Made captcha fields explicitly optional in `ReCaptchaBodyModel` by adding `NullValueHandling.Ignore` to all captcha-related `JsonProperty` attributes, ensuring they are omitted from the request payload when not set.
- Added missing `h-captcha-response` property to `ReCaptchaBodyModel`

## Newly Added APIs

- `OneTouchEmailVerificationWithToken` - Convenience method that combines `OneTouchEmailVerification` and `OneTouchLoginPing` into a single call, returning the access token and user profile after email verification.

# Version 11.7.1

**Release Date:** November 06, 2025
Expand Down
33 changes: 33 additions & 0 deletions Source/LoginRadiusSDK.V2/Api/Authentication/OneTouchLoginApi.cs
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,39 @@ public async Task<ApiResponse<VerifiedResponse>> OneTouchEmailVerification(strin
return await ConfigureAndExecute<VerifiedResponse>(HttpMethod.GET, resourcePath, queryParameters, null);
}
/// <summary>
/// This API verifies the provided token for One Touch Login and retrieves the access token
/// by combining OneTouchEmailVerification and OneTouchLoginPing into a single call.
/// </summary>
/// <param name="verificationToken">Verification token received in the email</param>
/// <param name="clientGuid">Unique string used in the One Touch Login request</param>
/// <param name="fields">The fields parameter filters the API response so that the response only includes a specific set of fields</param>
/// <param name="welcomeEmailTemplate">Name of the welcome email template</param>
/// <returns>Response containing User Profile Data and access token</returns>

public async Task<ApiResponse<AccessToken<Identity>>> OneTouchEmailVerificationWithToken(string verificationToken, string clientGuid,
string fields = "", string welcomeEmailTemplate = null)
{
if (string.IsNullOrWhiteSpace(verificationToken))
{
throw new ArgumentException(BaseConstants.ValidationMessage, nameof(verificationToken));
}
if (string.IsNullOrWhiteSpace(clientGuid))
{
throw new ArgumentException(BaseConstants.ValidationMessage, nameof(clientGuid));
}

var verificationResponse = await OneTouchEmailVerification(verificationToken, welcomeEmailTemplate);
if (verificationResponse.Response != null && verificationResponse.Response.IsPosted)
{
return await OneTouchLoginPing(clientGuid, fields);
}

return new ApiResponse<AccessToken<Identity>>
{
RestException = verificationResponse.RestException
};
}
/// <summary>
/// This API is used to check if the One Touch Login link has been clicked or not.
/// </summary>
/// <param name="clientGuid">Unique string used in the Smart Login request</param>
Expand Down
2 changes: 1 addition & 1 deletion Source/LoginRadiusSDK.V2/LoginRadiusSDK.V2.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
<RepositoryType>Github</RepositoryType>
<Company>LoginRadius Inc.</Company>
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
<Version>11.7.1</Version>
<Version>11.8.0</Version>
<AssemblyVersion>11.0.0.0</AssemblyVersion>
<FileVersion>11.0.0.0</FileVersion>
<RepositoryUrl>https://github.com/LoginRadius/dot-net-sdk</RepositoryUrl>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,19 +18,25 @@ public class ReCaptchaBodyModel
/// <summary>
/// The acknowledgement received by Google in Google recaptcha authorisation process.
/// </summary>
[JsonProperty(PropertyName = "g-recaptcha-response")]
[JsonProperty(PropertyName = "g-recaptcha-response", NullValueHandling = NullValueHandling.Ignore)]
public string G_recaptcha_response {get;set;}

/// <summary>
/// the value of the user's random string retrieved from the QQ captcha
/// </summary>
[JsonProperty(PropertyName = "qq_captcha_randstr")]
/// <summary>
/// The acknowledgement received by hCaptcha in hCaptcha authorisation process.
/// </summary>
[JsonProperty(PropertyName = "h-captcha-response", NullValueHandling = NullValueHandling.Ignore)]
public string H_captcha_response {get;set;}

[JsonProperty(PropertyName = "qq_captcha_randstr", NullValueHandling = NullValueHandling.Ignore)]
public string Qq_captcha_randstr {get;set;}

/// <summary>
/// QQ Captcha ticket received from QQ in the QQ Captcha authorization process
/// </summary>
[JsonProperty(PropertyName = "qq_captcha_ticket")]
[JsonProperty(PropertyName = "qq_captcha_ticket", NullValueHandling = NullValueHandling.Ignore)]
public string Qq_captcha_ticket {get;set;}

}
Expand Down