public ActionResult RedirectHandler()
        {
            string app_id       = Convert.ToString(ConfigurationManager.AppSettings["Client_Id"]);
            string app_secret   = Convert.ToString(ConfigurationManager.AppSettings["FacebookAppSecret"]);
            string scope        = Convert.ToString(ConfigurationManager.AppSettings["App_Scope"]);
            string AccessCode   = Convert.ToString(Request["code"]);
            string access_token = string.Empty;
            string RedirectUrl  = Convert.ToString(ConfigurationManager.AppSettings["RedirectUrlFB"]);

            if (!string.IsNullOrEmpty(AccessCode))
            {
                string url = string.Format("https://graph.facebook.com/oauth/access_token?client_id={0}&redirect_uri={1}&scope={2}&code={3}&client_secret={4}",
                                           app_id, RedirectUrl, scope, AccessCode, app_secret);

                HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;

                using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
                {
                    StreamReader reader       = new StreamReader(response.GetResponseStream());
                    string       jsonResponse = reader.ReadToEnd();

                    JavaScriptSerializer sr = new JavaScriptSerializer();
                    string jsondata         = jsonResponse;

                    dynamic DynamicData = JObject.Parse(jsondata);

                    access_token = DynamicData.access_token;
                }


                FacebookUserDetails user = GetDetails(access_token);

                ActionOutput <apiUserDetailShort> result = _userManager.FaceBookAuthentication(user);
                if (result.Status == ActionStatus.Successfull && result.Message != "Already Registered.")
                {
                    var auth = _userManager.LoginWithFaceBook(user);
                    CreateCustomAuthorisationCookie(auth.Email, false, new JavaScriptSerializer().Serialize(new UserDetails(auth)));
                    return(RedirectToActionPermanent("MyProfile", "Home", new { area = "user" }));
                }
                else
                {
                    if (result.Message == "Already Registered.")
                    {
                        var existUserDetails = _userManager.GetUserDetailsByUserId(result.Object.UserId).Object;
                        CreateCustomAuthorisationCookie(existUserDetails.Email, false, new JavaScriptSerializer().Serialize(new UserDetails(existUserDetails)));
                        if (existUserDetails.Address == null && (existUserDetails.CountryID == null || string.IsNullOrEmpty(existUserDetails.CountryID)))
                        {
                            return(RedirectToActionPermanent("MyProfile", "Home", new { area = "user" }));
                        }
                        return(RedirectToActionPermanent("Dashboard", "Home", new { area = "user" }));
                    }
                }
            }
            return(RedirectToAction("Index", "Home"));
        }
        private FacebookUserDetails GetDetails(string AccessToken)
        {
            FacebookUserDetails details = new FacebookUserDetails();
            Uri            eatTargetUri = new Uri("https://graph.facebook.com/oauth/access_token?grant_type=fb_exchange_token&client_id=" + ConfigurationManager.AppSettings["Client_Id"] + "&client_secret=" + ConfigurationManager.AppSettings["FacebookAppSecret"] + "&fb_exchange_token=" + AccessToken);
            HttpWebRequest eat          = (HttpWebRequest)HttpWebRequest.Create(eatTargetUri);

            StreamReader eatStr   = new StreamReader(eat.GetResponse().GetResponseStream());
            string       eatToken = eatStr.ReadToEnd().ToString().Replace("access_token=", "");

            // Split the access token and expiration from the single string
            string[] eatWords            = eatToken.Split('&');
            string   extendedAccessToken = eatWords[0];

            // Request the Facebook user information
            Uri            targetUserUri = new Uri("https://graph.facebook.com/me?fields=first_name,last_name,gender,email,birthday,relationship_status,locale,link&access_token=" + AccessToken);
            HttpWebRequest user          = (HttpWebRequest)HttpWebRequest.Create(targetUserUri);

            // Read the returned JSON object response
            StreamReader userInfo     = new StreamReader(user.GetResponse().GetResponseStream());
            string       jsonResponse = string.Empty;

            jsonResponse = userInfo.ReadToEnd();

            // Deserialize and convert the JSON object to the Facebook.User object type
            JavaScriptSerializer sr = new JavaScriptSerializer();
            string jsondata         = jsonResponse;

            dynamic stuff = JObject.Parse(jsondata);

            details.Name     = stuff.first_name + " " + stuff.last_name;
            details.Gender   = stuff.gender;
            details.ID       = stuff.id;
            details.BirthDay = stuff.birthday;
            details.Email    = stuff.email;
            details.Location = stuff.location;
            /*You can get other dynamic variables*/
            return(details);
        }