コード例 #1
0
        public async Task <UserLoginResponseModel> LoginGoogle(UserGoogleAuthModel model)
        {
            var googleClient = new GoogleUserClient(model.Data);
            var response     = await googleClient.User.Profile();

            if (!response.IsSuccess || response.Data == null)
            {
                throw new ExternalLoginException();
            }

            var data = response.Data;

            var user = await _appUserManager.FindByEmailAsync(data.Email);

            if (user == null)
            {
                user = new AppUser
                {
                    Email     = data.Email,
                    FirstName = data.GivenName,
                    LastName  = data.FamilyName,
                    UserName  = data.Email,
                    Image     = new MRUserImage
                    {
                        Url = data.Picture
                    },
                    Socials = new List <UserSocial>
                    {
                        new UserSocial
                        {
                            CreatedTime = DateTime.UtcNow,
                            Name        = "GOOGLE",
                            Token       = model.Data
                        }
                    }
                };

                var userCreate = await _appUserManager.CreateAsync(user);

                if (!userCreate.Succeeded)
                {
                    throw new ExternalLoginException();
                }

                var addRole = await _appUserManager.AddToRoleAsync(user, "USER");

                if (!addRole.Succeeded)
                {
                    throw new ExternalLoginException();
                }
            }
            else
            {
                if (user.Socials == null)
                {
                    user.Socials = new List <UserSocial>();
                }

                var social = user.Socials.FirstOrDefault(x => x.Name == "GOOGLE");
                if (social == null)
                {
                    user.Socials.Add(new UserSocial
                    {
                        CreatedTime = DateTime.UtcNow,
                        Token       = model.Data,
                        Name        = "GOOGLE"
                    });
                }
                else
                {
                    social.CreatedTime = DateTime.UtcNow;
                    social.Token       = model.Data;
                }

                await _appUserManager.UpdateAsync(user);
            }

            return(await AuthUserWithToken(user));
        }
コード例 #2
0
 public BaseUserNode(GoogleUserClient client)
 {
     _client = client;
 }
コード例 #3
0
 public UserNode(GoogleUserClient client) : base(client)
 {
 }