public bool AuthenticateForSignUp(System.Web.HttpContext context, out Me me, out string accessToken) { me = null; accessToken = ""; string code = context.Request.QueryString["code"]; string url; WebClient webClient = new WebClient(); // If this is a return of a Facebook result then check is an error has orrured string log = ""; if (context.Request.QueryString["error_reason"] != null) log += "error_reason" + context.Request.QueryString["error_reason"] + ";"; if (context.Request.QueryString["error"] != null) log += "error" + context.Request.QueryString["error"] + ";"; if (context.Request.QueryString["error_description"] != null) log += "error_description" + context.Request.QueryString["error_description"] + ";"; if (!String.IsNullOrEmpty(log)) { Exception exception = new Exception(log); Logger.Instance.Write(LogLevel.Error, exception, log); throw exception; } // No code given means initialize Facebook authentication. Redirect this page to Facebook with neccesery parameters if (String.IsNullOrEmpty(code)) { url = FACEBOOK_OAUTH_DIALOG; url += "?client_id=" + ConfigurationManager.AppSettings["Facebook.App.Id"]; //GetConfiguration("facebook.app_id"); url += "&redirect_uri=" + HttpUtility.UrlEncode(context.Request.Url.AbsoluteUri); url += "&scope=email,publish_stream,manage_pages"; url += "&state=" + context.Session.SessionID; context.Response.Redirect(url, true); //return; } // When code is given then Facebook authentication went without errors. if (context.Session.SessionID == context.Request.QueryString["state"]) { url = FACEBOOK_OAUTH_ACCESS; url += "?client_id=" + ConfigurationManager.AppSettings["Facebook.App.Id"]; //GetConfiguration("facebook.app_id"); url += "&redirect_uri=" + HttpUtility.UrlEncode(context.Request.Url.AbsoluteUri.Replace(context.Request.Url.Query, "")); url += "&client_secret=" + ConfigurationManager.AppSettings["Facebook.App.Secret"]; //GetConfiguration("facebook.app_secret"); url += "&code=" + code; string oAuthAccessResult = webClient.DownloadString(url); Logger.Instance.Write(LogLevel.Debug, "Facebook authentication result: " + oAuthAccessResult, oAuthAccessResult); DateTime expires = DateTime.Now.AddMinutes(1); int expiresIndex = oAuthAccessResult.IndexOf("&expires="); if (expiresIndex == -1) { expiresIndex = oAuthAccessResult.Length; } else { string expiresStr = oAuthAccessResult.Substring(expiresIndex + 9, oAuthAccessResult.Length - expiresIndex - 9); int expiresInSec = int.Parse(expiresStr); expires = DateTime.Now.AddSeconds(expiresInSec); } accessToken = oAuthAccessResult.Substring(oAuthAccessResult.IndexOf("access_token=") + 13, expiresIndex - 13); me = GetMe(accessToken); if (me == null) { Logger.Instance.Write(LogLevel.Error, "Cannot verify the Facebook account", new object[] { accessToken }); throw new Exception("Cannot verify the Facebook account"); } var _client = new FacebookClient(accessToken); dynamic _me = _client.Get("me"); firstName = _me.first_name; lastName = _me.last_name; email = _me.email; using (Database db = new MySqlDatabase()) { isEmailExist = db.isEmailAlreadyRegistered(email); } if (string.IsNullOrEmpty(email) || isEmailExist == true) return false; //fbAuthentication.Persist(me, accessToken, expires); } return true; }