protected void Page_Load(object sender, EventArgs e) { faces.Visible = _showFaces; string fbRedirect = "http://" + Request.Url.Host + "/Login.aspx?step=fb"; //determine returl url string returnFromLoginUrl = ""; if (Request["fbreturn"] != null) { returnFromLoginUrl = Request["fbreturn"]; } else if (Request["return"] != null) { returnFromLoginUrl = Request["return"]; } else { returnFromLoginUrl = Utils.GetLoginReturnUrl(HttpContext.Current); } if (returnFromLoginUrl != "") { fbRedirect = fbRedirect + "&fbreturn=" + Server.UrlEncode(returnFromLoginUrl); //tilføj return url, så den huskes også via ture over facebook. //fbLink.NavigateUrl = "https://www.facebook.com/dialog/oauth?client_id=" + Facebook.AppID + "&redirect_uri=" + Server.UrlEncode( + "&response_type=code&scope=email"; } fbLink.NavigateUrl = "https://www.facebook.com/dialog/oauth?client_id=" + Facebook.AppID + "&redirect_uri=" + Server.UrlEncode(fbRedirect) + "&response_type=code&scope=email"; //Response.Write(fbLink.NavigateUrl); string accessToken = null; if ((Request["code"] != null) && (Request["step"] == "fb")) { accessToken = Facebook.GetAccessToken(Request["code"], fbRedirect); } if (accessToken != null) { //gem cookie HttpCookie aTokenCookie = new HttpCookie(Facebook.CookieID, accessToken); aTokenCookie.Expires = DateTime.Now.AddMonths(1); Response.SetCookie(aTokenCookie); long facebookUID = Facebook.GetFacebookUserId(accessToken); if (facebookUID == 0) { Response.Write("Could not determine facebook UID from code: " + Request["code"] + "\n with token: " + accessToken); } if (facebookUID != 0) { object YafUserID = Facebook.GetYafUser(facebookUID); MembershipUser user = null; if (YafUserID != null) { //log eksisterende fb bruger ind user = Membership.GetUser(YafUserID); DoLogin(user, false); } else { user = Membership.GetUser(); if (user != null) { //Der er en bruger logget ind, opret facebook forbindelse til den. Facebook.ConnectProfileToFB(user.ProviderUserKey.ToString(), facebookUID); DoLogin(user, false); } else { Facebook.FbUserInfo fbUserInfo = Facebook.GetUserInfo(accessToken); if (fbUserInfo == null) { Response.Write("Could not get necessary user information from Facebook."); return; } MembershipUserCollection members = Membership.FindUsersByEmail(fbUserInfo.email); MembershipUser[] membersArr = new MembershipUser[members.Count]; members.CopyTo(membersArr, 0); if (members.Count > 0) { //forbind eksisterende bruger til facebook profil user = membersArr[0]; Facebook.ConnectProfileToFB(user.ProviderUserKey.ToString(), facebookUID); //log ind DoLogin(user, false); } else { //opret ny bruger, og lav fb forbindelse try { user = Facebook.CreateNewFbUser(fbUserInfo); } catch (MembershipCreateUserException MemberShipException) { Response.Write(Registration.GetErrorMessage(MemberShipException.StatusCode, fbUserInfo.email)); return; } DoLogin(user, true); } } } } } }