Пример #1
0
        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);
            }
        }