[Bug]: Error on first login with Connector and Login Validation Lambda
What happened?
When you have a Generic Connector setup with a Login Validation Lambda, the first login a user does via the Connector it will always fail with an Unexpected FusionAuth error. On subsequent logins for the same user, they work as expected. So it only seems to apply to the first login for a user from a Connector. The Login Validation Lambda code seems to interfere with the Connector Login for some reason. I've got Debug Enabled turned on for both the Connector and the OAuth tab of the application but I don't get any error logs in System>Event Logs. I do get something in the Docker logs of my container for FusionAuth
Steps:
- Setup a Generic Connector on a Tenant
- Setup a Login Validation Lambda on the Tenant
- Try to login with a user from the Connector
- Get sent to an Unexpected Error Page on the FusionAuth side
- https://www.loom.com/share/c42f931013044fd98833ccd8d53e14cc
Log from Docker
2025-10-28 07:03:59.574 PM ERROR io.fusionauth.app.primeframework.error.ExceptionExceptionHandler - An unhandled exception was thrown java.lang.NullPointerException: Cannot invoke "io.fusionauth.domain.User.getRegistrationForApplication(java.util.UUID)" because "<parameter5>" is null at io.fusionauth.api.service.authentication.DefaultAuthenticationService.applyLoginValidationLambda(DefaultAuthenticationService.java:184) at io.fusionauth.api.service.authentication.DefaultAuthenticationService.authenticateUser(DefaultAuthenticationService.java:814) at io.fusionauth.api.service.authentication.DefaultAuthenticationService.authenticate(DefaultAuthenticationService.java:279) at io.fusionauth.app.action.api.LoginAction.lambda$post$1(LoginAction.java:151) at io.fusionauth.app.action.api.BaseLoginAction.callLogin(BaseLoginAction.java:186) at io.fusionauth.app.action.api.LoginAction.post(LoginAction.java:151) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) at java.base/java.lang.reflect.Method.invoke(Method.java:580) at org.primeframework.mvc.util.ReflectionUtils.invoke(ReflectionUtils.java:443) at org.primeframework.mvc.action.DefaultActionInvocationWorkflow.execute(DefaultActionInvocationWorkflow.java:77) at org.primeframework.mvc.action.DefaultActionInvocationWorkflow.perform(DefaultActionInvocationWorkflow.java:60) at org.primeframework.mvc.workflow.SubWorkflowChain.continueWorkflow(SubWorkflowChain.java:50) at org.primeframework.mvc.message.DefaultMessageWorkflow.perform(DefaultMessageWorkflow.java:50) at org.primeframework.mvc.workflow.SubWorkflowChain.continueWorkflow(SubWorkflowChain.java:50) at org.primeframework.mvc.validation.DefaultValidationWorkflow.perform(DefaultValidationWorkflow.java:45) at org.primeframework.mvc.workflow.SubWorkflowChain.continueWorkflow(SubWorkflowChain.java:50) at org.primeframework.mvc.security.DefaultSecurityWorkflow.perform(DefaultSecurityWorkflow.java:79) at org.primeframework.mvc.workflow.SubWorkflowChain.continueWorkflow(SubWorkflowChain.java:50) at org.primeframework.mvc.parameter.DefaultPostParameterWorkflow.perform(DefaultPostParameterWorkflow.java:49) at org.primeframework.mvc.workflow.SubWorkflowChain.continueWorkflow(SubWorkflowChain.java:50) at org.primeframework.mvc.content.DefaultContentWorkflow.perform(DefaultContentWorkflow.java:74) at org.primeframework.mvc.workflow.SubWorkflowChain.continueWorkflow(SubWorkflowChain.java:50) at org.primeframework.mvc.parameter.DefaultParameterWorkflow.perform(DefaultParameterWorkflow.java:58) at org.primeframework.mvc.workflow.SubWorkflowChain.continueWorkflow(SubWorkflowChain.java:50) at org.primeframework.mvc.parameter.DefaultURIParameterWorkflow.perform(DefaultURIParameterWorkflow.java:92) at org.primeframework.mvc.workflow.SubWorkflowChain.continueWorkflow(SubWorkflowChain.java:50) at org.primeframework.mvc.scope.DefaultScopeRetrievalWorkflow.perform(DefaultScopeRetrievalWorkflow.java:50) at org.primeframework.mvc.workflow.SubWorkflowChain.continueWorkflow(SubWorkflowChain.java:50) at org.primeframework.mvc.action.DefaultActionMappingWorkflow.perform(DefaultActionMappingWorkflow.java:121) at org.primeframework.mvc.workflow.SubWorkflowChain.continueWorkflow(SubWorkflowChain.java:50) at org.primeframework.mvc.security.DefaultSavedRequestWorkflow.perform(DefaultSavedRequestWorkflow.java:65) at org.primeframework.mvc.workflow.SubWorkflowChain.continueWorkflow(SubWorkflowChain.java:50) at org.primeframework.mvc.cors.CORSRequestWorkflow.perform(CORSRequestWorkflow.java:68) at org.primeframework.mvc.workflow.SubWorkflowChain.continueWorkflow(SubWorkflowChain.java:50) at org.primeframework.mvc.workflow.DefaultMVCWorkflow.perform(DefaultMVCWorkflow.java:108) at org.primeframework.mvc.PrimeMVCRequestHandler.handle(PrimeMVCRequestHandler.java:73) at io.fusionauth.http.server.HTTPWorker.run(HTTPWorker.java:54) at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) at java.base/java.lang.Thread.run(Thread.java:1583)
Connector Debug Log `Generic Connector Debug Log for [local node test ] with Id [7bc8cde5-23ab-4570-8306-9c14d272f078].
10/28/2025 06:25:49 PM Z Attempting authentication request to application with Id [83b46a29-b417-4481-a0e3-249c8ca8c8c2] from IP address [192.168.117.1] for [[email protected]] against the URL [http://connector-api:3000/]. 10/28/2025 06:25:49 PM Z Endpoint returned status code [200]. 10/28/2025 06:25:49 PM Z Connector User: { "active" : true, "connectorId" : "e3306678-a53a-4964-9040-1c96f36dda72", "data" : { "displayName" : "Johnny Boy", "favoriteColors" : [ "Red", "Blue" ] }, "email" : "[email protected]", "expiry" : 1571786483322, "firstName" : "John", "fullName" : "John Doe", "id" : "2915b245-4e93-4e38-a9ac-6b8890657822", "identities" : [ ], "memberships" : [ ], "passwordChangeRequired" : false, "passwordLastUpdateInstant" : 1742936980069, "phoneNumber" : "+13035551212", "preferredLanguages" : [ "en", "fr" ], "registrations" : [ ], "twoFactor" : { "methods" : [ { "method" : "sms", "mobilePhone" : "+13035551212" } ], "recoveryCodes" : [ ] }, "usernameStatus" : "ACTIVE", "verified" : false } 10/28/2025 06:25:49 PM Z User with Id [2915b245-4e93-4e38-a9ac-6b8890657822] does not exist in tenant [35c1f5a1-5c6e-40d5-9a62-9ba20cf58200]. Create the user. 10/28/2025 06:25:49 PM Z Policy indicates the user will be migrated.`
Version
1.60.2
Affects Versions
No response
Alternatives / Workarounds
No response