Ejemplo n.º 1
0
        public ActionResult AuthenticateCallback(string providerKey)
        {
            if (string.IsNullOrEmpty(providerKey))
            {
                throw new ArgumentNullException("providerKey");
            }

            // Determine which settings we need, based on the Provider.
            var settings = _authenticationService.GetAuthenticateServiceSettings(providerKey, Request.Url, "account/authenticatecallback");

            // Don't check for somet State.
            settings.State = null;

            var model = new AuthenticateCallbackViewModel();

            try
            {
                // Grab the authenticated client information.
                model.AuthenticatedClient = _authenticationService.GetAuthenticatedClient(settings, Request.QueryString);
            }
            catch (Exception exception)
            {
                model.Exception = exception;
            }

            if (model.Exception == null)
            {
                var user = _userRepository.GetByUsername(model.AuthenticatedClient.UserInformation.UserName);
                if (user == null)
                {
                    if (SessionFacade.User != null)
                    {
                        //Hook up accounts
                        _tracer.WriteTrace("User logged in, external login failed");
                        var dbUser = _userRepository.Get(SessionFacade.User.Id);
                        SetAuthenticationHandle(model, dbUser);
                        _userRepository.Update(dbUser);
                        SignInUser(dbUser.Username, false, dbUser);
                    }
                    else
                    {
                        //Add new user
                        _tracer.WriteTrace("User not logged in, external login failed");
                        var newUser = new User();
                        SetAuthenticationHandle(model, newUser);
                        newUser.Name = model.AuthenticatedClient.UserInformation.Name;
                        newUser.ImgUrl = model.AuthenticatedClient.UserInformation.Picture;
                        newUser.Email = model.AuthenticatedClient.UserInformation.Email;
                        newUser.Username = model.AuthenticatedClient.UserInformation.UserName;
                        _userRepository.Create(newUser);
                        SignInUser(newUser.Username, false, newUser);
                    }
                }
                else if (SessionFacade.User != null && user != SessionFacade.User)
                {
                    //TODO: Add error
                }
                else
                {
                    SignInUser(user.Username, false, user);
                }
            }
            return RedirectToAction("Index", "Home");
        }
Ejemplo n.º 2
0
 private void SetAuthenticationHandle(AuthenticateCallbackViewModel model, User dbUser)
 {
     if (model.AuthenticatedClient.ProviderName == Enum.GetName(typeof (ProviderNames), ProviderNames.twitter))
         dbUser.TwitterHandle = model.AuthenticatedClient.UserInformation.Id;
     else if (model.AuthenticatedClient.ProviderName == Enum.GetName(typeof (ProviderNames), ProviderNames.facebook))
         dbUser.FacebookHandle = model.AuthenticatedClient.UserInformation.Id;
     else if (model.AuthenticatedClient.ProviderName == Enum.GetName(typeof (ProviderNames), ProviderNames.google))
         dbUser.GoogleHandle = model.AuthenticatedClient.UserInformation.Id;
 }