public ActionResult ExternalLoginCallback(string returnUrl) { var result = OAuthWebSecurity.VerifyAuthentication( Url.Action("ExternalLoginCallback", new { ReturnUrl = returnUrl })); if (!result.IsSuccessful) { return(Redirect("~/")); } var salt = ConfigurationManager.AppSettings["SaltOfUserID"]; Func <string, string> hash = (s) => FormsAuthentication.HashPasswordForStoringInConfigFile(s, "MD5"); var user = new TeachMeTeachYouSurvey.Models.User { UserId = hash(string.Join("@", salt, result.ProviderUserId, result.Provider)), IdProviderName = result.Provider, // terrible hack... Name = result.Provider != "github" ? result.UserName : result.ExtraData["login"] }; using (var db = new TeachMeTeachYouSurvey.Models.TeachMeTeachYouDB()) { if (db.Users.Find(user.UserId) == null) { db.Users.Add(user); db.SaveChanges(); } } var cookie = FormsAuthentication.GetAuthCookie(user.Name, false); var ticket = FormsAuthentication.Decrypt(cookie.Value); ticket.GetType().InvokeMember("_UserData", BindingFlags.SetField | BindingFlags.NonPublic | BindingFlags.Instance, null, ticket, new object[] { user.UserId }); cookie.Value = FormsAuthentication.Encrypt(ticket); Response.Cookies.Add(cookie); return(Redirect("~/")); }
public ActionResult ExternalLoginCallback(string returnUrl) { var result = OAuthWebSecurity.VerifyAuthentication( Url.Action("ExternalLoginCallback", new { ReturnUrl = returnUrl })); if (!result.IsSuccessful) { return Redirect("~/"); } var salt = ConfigurationManager.AppSettings["SaltOfUserID"]; Func<string, string> hash = (s) => FormsAuthentication.HashPasswordForStoringInConfigFile(s, "MD5"); var user = new TeachMeTeachYouSurvey.Models.User { UserId = hash(string.Join("@", salt, result.ProviderUserId, result.Provider)), IdProviderName = result.Provider, // terrible hack... Name = result.Provider != "github" ? result.UserName : result.ExtraData["login"] }; using (var db = new TeachMeTeachYouSurvey.Models.TeachMeTeachYouDB()) { if (db.Users.Find(user.UserId) == null) { db.Users.Add(user); db.SaveChanges(); } } var cookie = FormsAuthentication.GetAuthCookie(user.Name, false); var ticket = FormsAuthentication.Decrypt(cookie.Value); ticket.GetType().InvokeMember("_UserData", BindingFlags.SetField | BindingFlags.NonPublic | BindingFlags.Instance, null, ticket, new object[] { user.UserId }); cookie.Value = FormsAuthentication.Encrypt(ticket); Response.Cookies.Add(cookie); return Redirect("~/"); }