Пример #1
0
        public async Task <IHttpActionResult> Register(RegisterBindingModel model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var extendUser = new Model.Model.UserExtend();
            var user       = new ApplicationUser()
            {
                UserName      = model.Email,
                Email         = model.Email,
                FirstName     = model.FirstName,
                LastName      = model.LastName,
                Gender        = model.Gender,
                Birthday      = model.Birthday,
                City          = model.City,
                User          = extendUser,
                SecurityStamp = "101010101010"
            };

            IdentityResult result = await UserManager.CreateAsync(user, model.Password);

            if (!result.Succeeded)
            {
                return(GetErrorResult(result));
            }
            await UserManager.AddToRoleAsync(user.Id, model.RoleName);


            string code = await this.UserManager.GenerateEmailConfirmationTokenAsync(user.Id);

            var callbackUrl = new Uri(Url.Link("ConfirmEmailRoute", new { userId = user.Id, code = code }));

            try
            {
                await this.UserManager.SendEmailAsync(user.Id,
                                                      "Confirm your account",
                                                      "Please confirm your account by clicking <a href=\"" + callbackUrl + "\">here</a>");
            }
            catch (Exception)
            {
                return(BadRequest());
            }
            return(Ok());
        }
Пример #2
0
        public async Task <IHttpActionResult> RegisterExternal()
        {
            var info = await Authentication.GetExternalLoginInfoAsync();

            if (info == null)
            {
                return(InternalServerError());
            }
            string firstName;
            string lastName;
            string gender;

            if (info.Login.LoginProvider == "Google")
            {
                var externalIdentity = Authentication.GetExternalIdentityAsync(DefaultAuthenticationTypes.ExternalCookie);
                lastName  = externalIdentity.Result.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Surname).Value;
                firstName = externalIdentity.Result.Claims.FirstOrDefault(c => c.Type == ClaimTypes.GivenName).Value;
                //         birthday = externalIdentity.Result.Claims.FirstOrDefault(c => c.Type == ClaimTypes.DateOfBirth).Value;
                gender = "male";
            }
            else
            {
                var accessToken = Authentication.GetExternalIdentity(DefaultAuthenticationTypes.ExternalCookie).FindFirstValue("FacebookAccessToken");
                var fb          = new FacebookClient(accessToken);
                //    dynamic aaa = fb.Get("/me");
                dynamic myInfo = fb.Get("/me?fields=id,email,first_name,last_name,gender");
                lastName  = myInfo["last_name"];
                firstName = myInfo["first_name"];
                gender    = myInfo["gender"];
            }
            Gender _gender = Gender.MALE;

            if (gender.Equals("female"))
            {
                _gender = Gender.FEMALE;
            }



            var userExtend = new Model.Model.UserExtend();

            var user = new ApplicationUser()
            {
                UserName       = info.Email,
                Email          = info.Email,
                FirstName      = firstName,
                LastName       = lastName,
                User           = userExtend,
                EmailConfirmed = true,
                Birthday       = null,
                Gender         = _gender
            };

            try
            {
                IdentityResult result = await UserManager.CreateAsync(user);

                if (!result.Succeeded)
                {
                    return(GetErrorResult(result));
                }


                result = await UserManager.AddLoginAsync(user.Id, info.Login);

                if (!result.Succeeded)
                {
                    return(GetErrorResult(result));
                }

                result = await UserManager.AddToRoleAsync(user.Id, "User");

                if (!result.Succeeded)
                {
                    return(GetErrorResult(result));
                }
                ClaimsIdentity oAuthIdentity = await user.GenerateUserIdentityAsync(UserManager,
                                                                                    OAuthDefaults.AuthenticationType);

                ClaimsIdentity cookieIdentity = await user.GenerateUserIdentityAsync(UserManager,
                                                                                     CookieAuthenticationDefaults.AuthenticationType);

                var role   = oAuthIdentity.Claims.Where(c => c.Type == ClaimTypes.Role).FirstOrDefault().Value;
                var userId = oAuthIdentity.Claims.Where(c => c.Type == ClaimTypes.NameIdentifier).FirstOrDefault().Value;
                AuthenticationProperties properties = ApplicationOAuthProvider.CreateProperties(user.UserName, role, userId);
                Authentication.SignIn(properties, oAuthIdentity, cookieIdentity);
                return(Ok(properties.Dictionary));
            }
            catch (Exception)
            {
                return(BadRequest());
            }
        }