Community Tip - Did you get an answer that solved your problem? Please mark it as an Accepted Solution so others with the same problem can find the answer easily. X
Hi, I am working on custom authenticator and I would like to store some auth key (from external system) in given user extension property directly in Authenticator code.
In normal service I can use following code:
User user = (User) EntityUtilities.findEntity("Jacek", RelationshipTypes.ThingworxRelationshipTypes.User);
user.setPropertyValue("lastName", new StringPrimitive("Gralak"));
And this works great. However when I am using the same piece of code after fire of successful login event in authenticator User object is null (EntityUtiilites are not able to retrieve user object):
AuthenticationUtilities.validateEnabledThingworxUser(USERNAME);
this.setCredentials(USERNAME);
AuthenticationUtilities.getSecurityMonitorThing().fireSuccessfulLoginEvent(USERNAME,SharedConstants.EMPTY_STRING);
User user = (User) EntityUtilities.findEntity(USERNAME, RelationshipTypes.ThingworxRelationshipTypes.User);
user.setPropertyValue("lastName", new StringPrimitive("authentiocator"));
Here user object is null.
Any hints?
I'm running into this same error. Any luck on figuring it out?
According to the doc validateEnabledThingworxUser method is deprecated (in 8.1). Maybe you can try to use validateThingworxUser.
I figured this out. You need to give the User a Context. Try this:
// Start Transaction
TransactionFactory.beginTransactionRequired();
ThreadLocalContext.setSecurityContext(SecurityContext.createSuperUserContext());
// Get User
User user = (User) EntityUtilities.findEntity(userName, ThingworxRelationshipTypes.User);
// Set User Property
user.setPropertyValue("lastName", new StringPrimitive("authenticator"));
// End Transaction
TransactionFactory.endTransactionRequired();
I'm not sure if this needs to be in a transaction, but this works for me. You'll need to wrap everything in a try/catch. I have this code in a method that is called after the fireSuccessfulLoginEvent is fired. Hope this helps you.