Partner Community Self Registration Scenario
What is the optimal solution to invite the users to self register for a community - but they can only register if they have a valid invitation link. When they do register, they must be allocated a profile and a role based on the information on the existing contact record - which must match based on the email address which has been invited to sign up.
The distinction must be between an Exec, Manager, User role - which would be stored on a field in the contact record.
Finally before the registration is confirmed, the users must verify their email address by a two factor authentication.
Interesting?
@Gunish Chawla Late response, but hope it's still useful :)
It sounds like the requirements around registration would be best handled through a custom self-registration controller and a custom visualforce self-registration page.
Contacts to be invited could be sent a link to the self-registration page with a query string parameter populated with something by which the contact can be identified (maybe a custom ID field on contact or a hash of the email address).
This query string parameter would be read by the self-registration controller and used to find the matching contact record. You might want a custom field on contact indicating an invitation has been sent to check be absolutely sure. Based on whether a valid contact exists the controller can continue and create the user or return an exception.
Assuming we've found a contact who was sent the invitation, the relevant info on the contact can be used in the controller to determine which profile and role are applied.
I don't know of a simpler way to ensure that only users sent the email are allowed to register, so as far as I know that would be optimal.
Verification of email address can be done through a standard Salesforce self-registration mechanism:
https://help.salesforce.com/articleView?id=networks_customize_login_passwordless_verify.htm&type=5