I have been struggling to get OAuth to work on my MVC4 mobile application.
I basically
- Created an MVC4 Mobile application
- Created an MVC4 Web application
- Copied the AccountController, AccountModel, InitializeSimpleMembershipAttribute and all account views into my MVC4 Mobile application
- Enabled Google and Facebook OAuth providers
- I also ensured RoleManager was initialized according to simplemembershipprovider-not-working, although I do not think that was important. ( I needed it for some role-based security I was testing)
- Disabled ajax ( I think) by setting data-ajax=”false”:
using (Html.BeginForm("ExternalLogin", "Account",new RouteValueDictionary { { "ReturnUrl", ViewBag.ReturnUrl } }, FormMethod.Post, new Dictionary<string, object> { { "data-ajax", false } }))(This did not seem to have any effect on the page – so I may be doing something wrong here…)
I can get to the LogIn view /Account/Login, and when I click the google button, the debugger breaks into public ActionResult ExternalLogin(string provider, string returnUrl)
However – the public ActionResult ExternalLoginCallback(string returnUrl) is never hit.
Visually, I get the jquery mobile “page loading” animation – then I get “Error Loading Page”
I have two questions:
- How can I get more information when I try to figure out what happens?
- How can I get OAuth working on my MVC4 mobile site?
BTW: Both sites target .Net4.0
OK – so I figured out the answer – the cuplrit was indeed the ajax in jQuery mobile.
I modified my _layout.cshtml so that it can render a custom script after loading jQuery, but before loading jQuery mobile:
Then I modified my Login.cshtml so that it contains the section:
And finally, I added the following to my scripts folder:
disable-ajax.js:
RemoveHashFromWindowLocation.js: (Thanks to Facebook Oauth Login With Jquery Mobile #_=_)
Voila – OAuth working with jQuery mobile. 🙂