Пример #1
0
        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();
        }