@@ -236,6 +236,8 @@ Define Auth Challenge | `data_classes.cognito_user_pool_event.DefineAuthChalleng
236236Create Auth Challenge | ` data_classes.cognito_user_pool_event.CreateAuthChallengeTriggerEvent `
237237Verify Auth Challenge | ` data_classes.cognito_user_pool_event.VerifyAuthChallengeResponseTriggerEvent `
238238
239+ #### Post Confirmation Example
240+
239241=== "app.py"
240242
241243 ```python
@@ -248,6 +250,201 @@ Verify Auth Challenge | `data_classes.cognito_user_pool_event.VerifyAuthChalleng
248250 do_something_with(user_attributes)
249251 ```
250252
253+ #### Define Auth Challenge Example
254+
255+ !!! warning "NOTE "
256+ In this example we are modifying the wrapped dict response fields, so we need to return the json serializable wrapped event in ` event.raw_event `
257+
258+ !!! info "NOTE "
259+ This example is based on the AWS Cognito docs for [ Define Auth Challenge Lambda Trigger] ( https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-lambda-define-auth-challenge.html ) {target="_ blank"}
260+
261+ === "app.py"
262+
263+ ```python
264+ from aws_lambda_powertools.utilities.data_classes.cognito_user_pool_event import DefineAuthChallengeTriggerEvent
265+
266+ def handler(event: dict, context) -> dict:
267+ event: DefineAuthChallengeTriggerEvent = DefineAuthChallengeTriggerEvent(event)
268+ if (
269+ len(event.request.session) == 1
270+ and event.request.session[0].challenge_name == "SRP_A"
271+ ):
272+ event.response.issue_tokens = False
273+ event.response.fail_authentication = False
274+ event.response.challenge_name = "PASSWORD_VERIFIER"
275+ elif (
276+ len(event.request.session) == 2
277+ and event.request.session[1].challenge_name == "PASSWORD_VERIFIER"
278+ and event.request.session[1].challenge_result
279+ ):
280+ event.response.issue_tokens = False
281+ event.response.fail_authentication = False
282+ event.response.challenge_name = "CUSTOM_CHALLENGE"
283+ elif (
284+ len(event.request.session) == 3
285+ and event.request.session[2].challenge_name == "CUSTOM_CHALLENGE"
286+ and event.request.session[2].challenge_result
287+ ):
288+ event.response.issue_tokens = True
289+ event.response.fail_authentication = False
290+ else:
291+ event.response.issue_tokens = False
292+ event.response.fail_authentication = True
293+
294+ return event.raw_event
295+ ```
296+ === "SPR_A response"
297+
298+ ```json hl_lines="25-27"
299+ {
300+ "version": "1",
301+ "region": "us-east-1",
302+ "userPoolId": "us-east-1_example",
303+ "userName": "UserName",
304+ "callerContext": {
305+ "awsSdkVersion": "awsSdkVersion",
306+ "clientId": "clientId"
307+ },
308+ "triggerSource": "DefineAuthChallenge_Authentication",
309+ "request": {
310+ "userAttributes": {
311+ "sub": "4A709A36-7D63-4785-829D-4198EF10EBDA",
312+ "email_verified": "true",
313+ "name": "First Last",
314+ "email": "define-auth@mail.com"
315+ },
316+ "session": [
317+ {
318+ "challengeName": "SRP_A",
319+ "challengeResult": true
320+ }
321+ ]
322+ },
323+ "response": {
324+ "issueTokens": false,
325+ "failAuthentication": false,
326+ "challengeName": "PASSWORD_VERIFIER"
327+ }
328+ }
329+ ```
330+ === "PASSWORD_VERIFIER success response"
331+
332+ ```json hl_lines="30-32"
333+ {
334+ "version": "1",
335+ "region": "us-east-1",
336+ "userPoolId": "us-east-1_example",
337+ "userName": "UserName",
338+ "callerContext": {
339+ "awsSdkVersion": "awsSdkVersion",
340+ "clientId": "clientId"
341+ },
342+ "triggerSource": "DefineAuthChallenge_Authentication",
343+ "request": {
344+ "userAttributes": {
345+ "sub": "4A709A36-7D63-4785-829D-4198EF10EBDA",
346+ "email_verified": "true",
347+ "name": "First Last",
348+ "email": "define-auth@mail.com"
349+ },
350+ "session": [
351+ {
352+ "challengeName": "SRP_A",
353+ "challengeResult": true
354+ },
355+ {
356+ "challengeName": "PASSWORD_VERIFIER",
357+ "challengeResult": true
358+ }
359+ ]
360+ },
361+ "response": {
362+ "issueTokens": false,
363+ "failAuthentication": false,
364+ "challengeName": "CUSTOM_CHALLENGE"
365+ }
366+ }
367+
368+ ```
369+ === "CUSTOM_CHALLENGE success response"
370+
371+ ```json hl_lines="34 35"
372+ {
373+ "version": "1",
374+ "region": "us-east-1",
375+ "userPoolId": "us-east-1_example",
376+ "userName": "UserName",
377+ "callerContext": {
378+ "awsSdkVersion": "awsSdkVersion",
379+ "clientId": "clientId"
380+ },
381+ "triggerSource": "DefineAuthChallenge_Authentication",
382+ "request": {
383+ "userAttributes": {
384+ "sub": "4A709A36-7D63-4785-829D-4198EF10EBDA",
385+ "email_verified": "true",
386+ "name": "First Last",
387+ "email": "define-auth@mail.com"
388+ },
389+ "session": [
390+ {
391+ "challengeName": "SRP_A",
392+ "challengeResult": true
393+ },
394+ {
395+ "challengeName": "PASSWORD_VERIFIER",
396+ "challengeResult": true
397+ },
398+ {
399+ "challengeName": "CUSTOM_CHALLENGE",
400+ "challengeResult": true
401+ }
402+ ]
403+ },
404+ "response": {
405+ "issueTokens": true,
406+ "failAuthentication": false
407+ }
408+ }
409+ ```
410+
411+ #### Create Auth Challenge Example
412+
413+ !!! info "NOTE "
414+ This example is based on the AWS Cognito docs for [ Create Auth Challenge Lambda Trigger] ( https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-lambda-create-auth-challenge.html ) {target="_ blank"}
415+
416+ === "app.py"
417+
418+ ```python
419+ from aws_lambda_powertools.utilities.data_classes.cognito_user_pool_event import CreateAuthChallengeTriggerEvent
420+
421+ def handler(event: dict, context) -> dict:
422+ event: CreateAuthChallengeTriggerEvent = CreateAuthChallengeTriggerEvent(event)
423+ if event.request.challenge_name == "CUSTOM_CHALLENGE":
424+ event.response.public_challenge_parameters = {"captchaUrl": "url/123.jpg"}
425+ event.response.private_challenge_parameters = {"answer": "5"}
426+ event.response.challenge_metadata = "CAPTCHA_CHALLENGE"
427+ return event.raw_event
428+ ```
429+
430+ #### Verify Auth Challenge Response Example
431+
432+ !!! info "NOTE "
433+ This example is based on the AWS Cognito docs for [ Verify Auth Challenge Response Lambda Trigger] ( https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-lambda-verify-auth-challenge-response.html ) {target="_ blank"}
434+
435+ === "app.py"
436+
437+ ```python
438+ from aws_lambda_powertools.utilities.data_classes.cognito_user_pool_event import VerifyAuthChallengeResponseTriggerEvent
439+
440+ def handler(event: dict, context) -> dict:
441+ event: VerifyAuthChallengeResponseTriggerEvent = VerifyAuthChallengeResponseTriggerEvent(event)
442+ event.response.answer_correct = (
443+ event.request.private_challenge_parameters.get("answer") == event.request.challenge_answer
444+ )
445+ return event.raw_event
446+ ```
447+
251448### Connect Contact Flow
252449
253450=== "app.py"
0 commit comments