public async Task <IHttpActionResult> GetExternalLogin(string provider, string error = null) { if (error != null) { return(Redirect(Url.Content("~/") + "#error=" + Uri.EscapeDataString(error))); } if (!User.Identity.IsAuthenticated) { return(new ChallengeResult(provider, this)); } ExternalLoginData externalLogin = ExternalLoginData.FromIdentity(User.Identity as ClaimsIdentity); if (externalLogin == null) { return(InternalServerError()); } WooAuth.data.WooDataContext dc = new WooAuth.data.WooDataContext(); var usr = dc.User.FirstOrDefault(u => u.UserName == externalLogin.UserName && externalLogin.LoginProvider == u.Provider); if (usr == null) { dc.User.Add(new User { Provider = externalLogin.LoginProvider, AvatarPic = "http://graph.facebook.com/" + externalLogin.ProviderKey + "/picture?type=large", UserName = externalLogin.UserName }); try { dc.SaveChanges(); } catch (Exception e) { throw new Exception("Не удалось создать пользователя"); } } var uniqName = externalLogin.LoginProvider + ":" + externalLogin.UserName; uniqName = uniqName.Encrypt(); //if (externalLogin.LoginProvider != provider) //{ // Authentication.SignOut(DefaultAuthenticationTypes.ExternalCookie); // return new ChallengeResult(provider, this); //} //IdentityUser user = await UserManager.FindAsync(new UserLoginInfo(externalLogin.LoginProvider, // externalLogin.ProviderKey)); //bool hasRegistered = user != null; //if (hasRegistered) //{ // Authentication.SignOut(DefaultAuthenticationTypes.ExternalCookie); // ClaimsIdentity oAuthIdentity = await UserManager.CreateIdentityAsync(user, // OAuthDefaults.AuthenticationType); // ClaimsIdentity cookieIdentity = await UserManager.CreateIdentityAsync(user, // CookieAuthenticationDefaults.AuthenticationType); // AuthenticationProperties properties = ApplicationOAuthProvider.CreateProperties(user.UserName); // Authentication.SignIn(properties, oAuthIdentity, cookieIdentity); //} //else //{ // IEnumerable<Claim> claims = externalLogin.GetClaims(); // ClaimsIdentity identity = new ClaimsIdentity(claims, OAuthDefaults.AuthenticationType); // Authentication.SignIn(identity); //} uniqName = HttpUtility.UrlEncodeUnicode(uniqName); return(Redirect("http://woohoo.azurewebsites.net/Token/Index?token=" + uniqName)); //return Ok(); }
public async Task<IHttpActionResult> GetExternalLogin(string provider, string error = null) { if (error != null) { return Redirect(Url.Content("~/") + "#error=" + Uri.EscapeDataString(error)); } if (!User.Identity.IsAuthenticated) { return new ChallengeResult(provider, this); } ExternalLoginData externalLogin = ExternalLoginData.FromIdentity(User.Identity as ClaimsIdentity); if (externalLogin == null) { return InternalServerError(); } WooAuth.data.WooDataContext dc = new WooAuth.data.WooDataContext(); var usr = dc.User.FirstOrDefault(u => u.UserName == externalLogin.UserName && externalLogin.LoginProvider == u.Provider); if (usr == null) { dc.User.Add(new User { Provider = externalLogin.LoginProvider, AvatarPic = "http://graph.facebook.com/" + externalLogin.ProviderKey + "/picture?type=large", UserName = externalLogin.UserName }); try { dc.SaveChanges(); } catch (Exception e) { throw new Exception("Не удалось создать пользователя"); } } var uniqName = externalLogin.LoginProvider + ":" + externalLogin.UserName; uniqName = uniqName.Encrypt(); //if (externalLogin.LoginProvider != provider) //{ // Authentication.SignOut(DefaultAuthenticationTypes.ExternalCookie); // return new ChallengeResult(provider, this); //} //IdentityUser user = await UserManager.FindAsync(new UserLoginInfo(externalLogin.LoginProvider, // externalLogin.ProviderKey)); //bool hasRegistered = user != null; //if (hasRegistered) //{ // Authentication.SignOut(DefaultAuthenticationTypes.ExternalCookie); // ClaimsIdentity oAuthIdentity = await UserManager.CreateIdentityAsync(user, // OAuthDefaults.AuthenticationType); // ClaimsIdentity cookieIdentity = await UserManager.CreateIdentityAsync(user, // CookieAuthenticationDefaults.AuthenticationType); // AuthenticationProperties properties = ApplicationOAuthProvider.CreateProperties(user.UserName); // Authentication.SignIn(properties, oAuthIdentity, cookieIdentity); //} //else //{ // IEnumerable<Claim> claims = externalLogin.GetClaims(); // ClaimsIdentity identity = new ClaimsIdentity(claims, OAuthDefaults.AuthenticationType); // Authentication.SignIn(identity); //} uniqName = HttpUtility.UrlEncodeUnicode(uniqName); return Redirect("http://woohoo.azurewebsites.net/Token/Index?token=" + uniqName); //return Ok(); }