Example #1
0
        public override IClaimsIdentity ProcessSignInResponse(string realm, string originalUrl, HttpContextBase httpContext)
        {
            var client = new TwitterClient(this.consumerKey, this.consumerSecret);

            AuthenticationResult result;
            try
            {
                result = client.VerifyAuthentication(httpContext);
            }
            catch (WebException wex)
            {
                throw new InvalidOperationException(new StreamReader(wex.Response.GetResponseStream()).ReadToEnd(), wex);
            }

            var claims = new List<Claim>
                {
                    new Claim(System.IdentityModel.Claims.ClaimTypes.NameIdentifier, result.ExtraData["name"])
                };

            foreach (var claim in result.ExtraData)
            {
                claims.Add(new Claim("http://schemas.twitter.com/" + claim.Key, claim.Value));
            }

            return new ClaimsIdentity(claims, "Twitter");
        }
        // Callback after Twitter Login
        public ActionResult Callback()
        {
            DotNetOpenAuth.AspNet.Clients.TwitterClient client = new TwitterClient(ConfigurationManager.AppSettings["twitterConsumerKey"], ConfigurationManager.AppSettings["twitterConsumerSecret"]);

            var result = client.VerifyAuthentication(this.HttpContext);

            return RedirectToAction("Index", "Home");
        }
        public ActionResult Index()
        {
            DotNetOpenAuth.AspNet.Clients.TwitterClient client = new TwitterClient(ConfigurationManager.AppSettings["twitterConsumerKey"], ConfigurationManager.AppSettings["twitterConsumerSecret"]);

            var result = client.VerifyAuthentication(this.HttpContext);

            if(result.IsSuccessful)
            {
                var user = RavenSession.Query<User>().Search(x => x.ProviderUserId, result.ProviderUserId).SingleOrDefault();

                if (user == null)
                {
                    user = new User();
                    user.Id = Guid.NewGuid();
                    user.ProviderUserId = result.ProviderUserId;
                    user.RegisteredOn = DateTime.UtcNow;
                }

                // sync with twitter user meta data
                user.Login = result.UserName;

                if (result.ExtraData.ContainsKey("location"))
                    user.Location = result.ExtraData["location"];
                if (result.ExtraData.ContainsKey("name"))
                    user.Name = result.ExtraData["name"];
                if (result.ExtraData.ContainsKey("description"))
                    user.Description = result.ExtraData["description"];
                if (result.ExtraData.ContainsKey("ur"))
                    user.Url = result.ExtraData["url"];
                if (result.ExtraData.ContainsKey("accesstoken"))
                    user.AccessToken = result.ExtraData["accesstoken"];

                user.LastSignIn = DateTime.UtcNow;

                RavenSession.Store(user);
                RavenSession.SaveChanges();

                FormsAuthentication.SetAuthCookie(user.Login, false);

                if (HttpContext.Request.UrlReferrer != null && string.IsNullOrWhiteSpace(HttpContext.Request.UrlReferrer.AbsoluteUri) == false)
                    return Redirect(HttpContext.Request.UrlReferrer.AbsoluteUri);

                return RedirectToAction("Index", "Home");
            }

            return RedirectToAction("Index", "Home");
        }