asp.net mvc3, cookie

Tengo un sitio web donde un usuario puede autenticarse con su cuenta de facebook o twitter: para saber el usuario utilicé la cookie:

Global.asax:

protected void Application_AuthenticateRequest(Object sender, EventArgs e)
    {
        HttpCookie authCookie = Request.Cookies[FormsAuthentication.FormsCookieName];
        if (authCookie != null)
        {
            var authTicket = FormsAuthentication.Decrypt(authCookie.Value);
            var id = new MyIdentity(authTicket);
            var userData = authTicket.UserData.Split(',');

            id.SocialProviderName = userData[0].Replace("providerslist=", "").Split('|')[0];
            var newUser = new MyPrincipal(id);
            Context.User = newUser;
        }

    }

el usuario puede vincular dos cuentas (facebook y twitter). conéctese con twitter y luego haga clic en "enlace de cuenta" y será redirigido para autenticarse con su cuenta de facebook

el problema es que al redirigir a la segunda cuenta la cookie se vuelve nula y

si (este.HttpContext.Request.IsAuthenticated) {...}

falso retorno

(si me conecto con una sola cuenta la cookie es válida no hay problema)

Mi controlador:

....

FormsAuthentication.SetAuthCookie(socialProfile.UserId, true);

ResetFormsCookie(nombreProveedor, perfilsocial.IdUsuario);

....

ID de usuario generado por GUID

  public void ResetFormsCookie(string providerName, string userId)
    {
        var authCookie = HttpContext.Current.ApplicationInstance.Request.Cookies[FormsAuthentication.FormsCookieName];
        if (authCookie == null)
        {
            authCookie = FormsAuthentication.GetAuthCookie(userId, true);
        }
        var authTicket = FormsAuthentication.Decrypt(authCookie.Value);
        var userData = authTicket.UserData;
        var providerslist = (from c in userData.Split(',') where c.Contains("providerslist=") select c).FirstOrDefault();
        if (string.IsNullOrEmpty(providerslist))
        {
            userData += string.IsNullOrEmpty(userData) ? "providerslist=" + providerName : ",providerslist=" + providerName;
        }
        else
        {
            if (!providerslist.Contains(providerName))
            {
                userData = userData.Replace(providerslist, providerslist + "|" + providerName);
            }
        }
        var newTicket = new FormsAuthenticationTicket(authTicket.Version, authTicket.Name, authTicket.IssueDate
            , DateTime.Now.AddDays(90) // authTicket.Expiration ToDo: This need to set in the config
        , authTicket.IsPersistent, userData);
        authCookie.Value = FormsAuthentication.Encrypt(newTicket);
        HttpContext.Current.Response.Cookies.Add(authCookie);
    }

Me disculpo por mi Inglés

Gracias,

preguntado el 12 de junio de 12 a las 21:06

@jlafay ¿Me puede ayudar a resolver el problema, gracias -

@Darin Dimitrov ¿Puede ayudarme a resolver el problema? Gracias.

0 Respuestas

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.