public ActionResult Connect(string returnUrl = "") { var settings = GetSettings(); var facebookUser = _facebookConnectService.FetchMe(); if (ValidateUser(facebookUser)) { if (_facebookConnectService.AuthenticatedFacebookUserIsSaved()) { var user = _facebookConnectService.UpdateAuthenticatedFacebookUser(facebookUser); _authenticationService.SignIn(user.As <IUser>(), false); } // With this existing users can attach their FB account to their local accounts else if (_authenticationService.IsAuthenticated()) { _facebookConnectService.UpdateFacebookUser(_authenticationService.GetAuthenticatedUser(), facebookUser); } else if (settings.SimpleRegistration) { return(new ShapeResult(this, _orchardServices.New.FacebookConnectRegistrationChooser(ReturnUrl: returnUrl))); } else { return(this.RedirectLocal(Url.Action("Register", "Account", new { Area = "Orchard.Users" }))); } } return(this.RedirectLocal(returnUrl)); // "this" is necessary, as this is from an extension (Orchard.Mvc.Extensions.ControllerExtensions) }
/// <summary> /// Updates the currently authenticated Facebook user's local profile with fresh profile data from Facebook /// </summary> /// <param name="newData">Data to update the profile with. If not set, fresh data will be fetched from Facebook.</param> /// <returns>The updated user</returns> public static IFacebookUser UpdateAuthenticatedFacebookUser(this IFacebookConnectService service, IFacebookUser newData = null) { var facebookUser = GetAuthenticatedFacebookUser(service); if (facebookUser == null) { return(null); } if (newData == null) { newData = service.FetchMe(); } service.UpdateFacebookUser(facebookUser.As <IUser>(), newData); return(facebookUser); }
public void Created(UserContext context) { if (!_facebookConnectService.IsAuthenticated()) { return; } // This can happen if someone connects to the site with FB, logs out then registers a new user while being logged in to FB. // This prevents to attach the same FB user to different local users. if (_facebookConnectService.AuthenticatedFacebookUserIsSaved()) { return; } var facebookUser = _facebookConnectService.FetchMe(); IEnumerable <FacebookConnectValidationKey> errors; if (_facebookConnectService.UserIsValid(facebookUser, _siteService.GetSiteSettings().As <FacebookConnectSettingsPart>(), out errors)) { _facebookConnectService.UpdateFacebookUser(context.User.As <IUser>(), facebookUser); } }