Skip to content

Commit a5c12f0

Browse files
author
Daniele Giallonardo
committed
2 parents 3853c7b + ac92ba7 commit a5c12f0

1 file changed

Lines changed: 70 additions & 0 deletions

File tree

README.md

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@ public void ConfigureServices(IServiceCollection services)
118118
})
119119
.AddCie(Configuration, o => {
120120
o.Events.OnTokenCreating = async (s) => await s.HttpContext.RequestServices.GetRequiredService<CustomCieEvents>().TokenCreating(s);
121+
o.Events.OnAuthenticationSuccess = async (s) => await s.HttpContext.RequestServices.GetRequiredService<CustomCieEvents>().AuthenticationSuccess(s);
121122
o.LoadFromConfiguration(Configuration);
122123
})
123124
.AddCookie();
@@ -144,6 +145,75 @@ public class CustomCieEvents : CieEvents
144145

145146
return base.TokenCreating(context);
146147
}
148+
149+
public override Task AuthenticationSuccess(AuthenticationSuccessContext context)
150+
{
151+
var principal = context.Principal;
152+
153+
// Recupero dati provenienti da Cie da ClaimsPrincipal
154+
var name = principal.FindFirst(CieClaimTypes.Name);
155+
var familyName = principal.FindFirst(CieClaimTypes.FamilyName);
156+
var email = principal.FindFirst(CieClaimTypes.Email);
157+
var dateOfBirth = principal.FindFirst(CieClaimTypes.DateOfBirth);
158+
159+
return base.AuthenticationSuccess(context);
160+
}
161+
}
162+
```
163+
164+
# Error Handling
165+
La libreria può, in qualunque fase (sia in fase di creazione della Request sia in fase di gestione della Response), sollevare eccezioni.
166+
Un tipico scenario è quello in cui vengono ricevuti i codici di errore previsti dal protocollo (n.19, n.20, ecc....), in tal caso la libreria solleva un'eccezione contenente il corrispondente messaggio d'errore localizzato, richiesto dalle specifiche CIE3.0, che è possibile gestire (ad esempio per la visualizzazione) utilizzando il normale flusso previsto per AspNetCore. L'esempio seguente fa uso del middleware di ExceptionHandling di AspNetCore.
167+
168+
```csharp
169+
public void Configure(IApplicationBuilder app, IHostEnvironment env)
170+
{
171+
...
172+
app.UseExceptionHandler("/Home/Error");
173+
...
174+
}
175+
176+
.......
177+
178+
// HomeController
179+
[AllowAnonymous]
180+
public async Task<IActionResult> Error()
181+
{
182+
var exceptionHandlerPathFeature =
183+
HttpContext.Features.Get<IExceptionHandlerPathFeature>();
184+
185+
string errorMessage = string.Empty;
186+
187+
if (exceptionHandlerPathFeature?.Error != null)
188+
{
189+
var messages = FromHierarchy(exceptionHandlerPathFeature?.Error, ex => ex.InnerException)
190+
.Select(ex => ex.Message)
191+
.ToList();
192+
errorMessage = String.Join(" ", messages);
193+
}
194+
195+
return View(new ErrorViewModel
196+
{
197+
RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier,
198+
Message = errorMessage
199+
});
200+
}
201+
202+
private IEnumerable<TSource> FromHierarchy<TSource>(TSource source,
203+
Func<TSource, TSource> nextItem,
204+
Func<TSource, bool> canContinue)
205+
{
206+
for (var current = source; canContinue(current); current = nextItem(current))
207+
{
208+
yield return current;
209+
}
210+
}
211+
212+
private IEnumerable<TSource> FromHierarchy<TSource>(TSource source,
213+
Func<TSource, TSource> nextItem)
214+
where TSource : class
215+
{
216+
return FromHierarchy(source, nextItem, s => s != null);
147217
}
148218
```
149219

0 commit comments

Comments
 (0)