I'm currently in the process of creating a new fairly highly customized DNN site using DNN 7.2.2.
I previously had a DNN 5 site with around 60,000 users stored in our database. I'm rewriting a lot of the site to use C# and to implement the new features of DNN 7.
One feature that I want to add to the new site version is the ability for our users to login using facebook, google or twitter accounts. I have been testing this feature using the existing Authentication Providers, and have found that there is no problem with users creating a new account using these services, however, it seems that it is impossible to associate the existing accounts with facebook/google/twitter accounts.
I have attempted to write my own Authentication providers to associate Facebook accounts with existing DNN accounts with limited success.
It seems that while it might be possible to log in a existing user using their facebook account, I cannot have them create an account with facebook and subsequently log in with their created DNN account.
We have looked through the source code and the problem seems to stem from the DotNetNuke.Security.Membership.AspNetMembershipProvider.CreateUser() method (line 874-875) in AspNetMembershipProvider.cs. This method checks the Request parameters and if it finds an oAuth "state" parameter, it prepends the state parameter to the users email to create a new Username.
This is an issue as we would like to have one canonical account per user independent of login method based off their email address. In fact this is kind of necessary as we use the DNN Users table entries to index what content the Users have bought from our site.
I was wondering if anyone has any suggestions on how I could mitigate this problem without having to write my own membership provider class, or recompiling the core DotNetNuke DLL?
Can I temporarily delete the oAuth cookie for the duration of the createUser call or something?
Is there any third-patry modules that might provide this functioality?
Any help or suggestions would be appreciated.