public ActionResult CallBack(string oauth_token, string oauth_verifier, string ReturnUrl) { if (string.IsNullOrEmpty(oauth_token) || string.IsNullOrEmpty(oauth_verifier)) { UriBuilder builder = new UriBuilder(this.Request.Url); builder.Query = string.Concat( builder.Query, string.IsNullOrEmpty(builder.Query) ? string.Empty : "&", "ReturnUrl=", ReturnUrl); string token = OAuthUtility.GetRequestToken( ConfigurationManager.AppSettings["TwitterConsumerKey"], ConfigurationManager.AppSettings["TwitterConsumerSecret"], builder.ToString()).Token; return Redirect(OAuthUtility.BuildAuthorizationUri(token, true).ToString()); } var tokens = OAuthUtility.GetAccessToken( ConfigurationManager.AppSettings["TwitterConsumerKey"], ConfigurationManager.AppSettings["TwitterConsumerSecret"], oauth_token, oauth_verifier); //Realizamos la busqueda del usuario. Usuario usuario = (from u in db.Usuarios where u.TwitterUserId.Equals(tokens.UserId.ToString()) select u).FirstOrDefault(); if (usuario == null) { usuario = new Usuario() { Nick = tokens.ScreenName, TwitterUserId = tokens.UserId.ToString(), TwitterAccessKey = tokens.Token, TwitterAccessSecret = tokens.TokenSecret, FechaCreacion = DateTime.UtcNow, IsAdmin = false }; db.AddToUsuarios(usuario); db.SaveChanges(); } //Logueamos al usuario. EntrepanMembershipProvider EntrepanMembership = new EntrepanMembershipProvider(); EntrepanMembership.LogInUser(usuario.TwitterUserId, usuario.Id, usuario.Nick, usuario.IsAdmin, false); if (string.IsNullOrEmpty(ReturnUrl)) return Redirect("/"); else return Redirect(ReturnUrl); }
// // GET: /Account/OAuth/ public ActionResult OAuth(string code, string state) { FacebookOAuthResult oauthResult; if (FacebookOAuthResult.TryParse(Request.Url, out oauthResult)) { if (oauthResult.IsSuccess) { var oAuthClient = new FacebookOAuthClient(FacebookApplication.Current); if (IsDebug) { oAuthClient.RedirectUri = new Uri(redirectUrlDebug); } else { oAuthClient.RedirectUri = new Uri(redirectUrl); } dynamic tokenResult = oAuthClient.ExchangeCodeForAccessToken(code); string accessToken = tokenResult.access_token; DateTime expiresOn = DateTime.MaxValue; if (tokenResult.ContainsKey("expires")) { DateTimeConvertor.FromUnixTime(tokenResult.expires); } FacebookClient fbClient = new FacebookClient(accessToken); dynamic me = fbClient.Get("me?fields=id,name"); long facebookId = Convert.ToInt64(me.id); //Generamos el usuario. Usuario usuario = new Usuario(); usuario.FacebookId = facebookId.ToString(); usuario.Nick = (string)me.name; usuario.Email = (string)me.email; usuario.FechaCreacion = DateTime.Now; usuario.IsAdmin = false; //Comprobamos si existe en la BBDD como registrado, si no lo creamos. Usuario userdb = (from u in db.Usuarios where u.FacebookId.Equals(usuario.FacebookId) select u).FirstOrDefault(); if (userdb == null) { //Es un usuario nuevo. Lo guardamos en la BBDD. db.AddToUsuarios(usuario); db.SaveChanges(); } //Logueamos al usuario. EntrepanMembershipProvider EntrepanMembership = new EntrepanMembershipProvider(); EntrepanMembership.LogInUser(usuario.FacebookId, usuario.Id, usuario.Nick, usuario.IsAdmin, false); // prevent open redirection attack by checking if the url is local. if (Url.IsLocalUrl(state)) { return Redirect(state); } else { return RedirectToAction("Index", "Home"); } } } return RedirectToAction("Index", "Home"); }