I'm looking for a means that Contacts in my database can easily update their own fields and child records on a highly customised interface. I believe the best and cheapest solution is to build an authenticated landing page.
I've successfully built the following prototypes that have been able do this.
They all rely on finding the Contact via URL variables - their Salesforce ID and a 128-character hash that was created by a randomly-generated-at-runtime private key.
To get around not having the permission to edit Contacts via a guest profile, I use 'without sharing' in the Apex Controller.
Visualforce Site page
Community Builder-based page with Lightning Component. Uses @auraEnabled methods, not the Lightning data service
Visualforce Site page that hosts that Lightning Component via Lightning Out
I've tested them and they all do what they are supposed to do.
But, I'm wondering if there any risks involved? Thoughts that have come to mind are:
The use of ANY unauthenticated self-update page would be against the rules with Salesforce, as they might want us to use something like Customer Community licenses for that
The solution of using the Salesforce ID and a security hash is inherently unsecure and dangerous
There are technical reasons why one or all of the above ideas would not be feasible
If one or more of these ARE feasible, I'm happy to share my solution.