コード例 #1
0
        public async Task <object> Post([FromBody] FacebookSignInModel loginModel)
        {
            if (loginModel != null && loginModel.AccessToken != null)
            {
                return(await _facebookSignInService.LogIn(loginModel));
            }

            return(Unauthorized(new { Message = "Token inválido" }));
        }
コード例 #2
0
        public async Task <object> LogIn(FacebookSignInModel signInModel)
        {
            var isValidToken = await IsValidAccessToken(signInModel.AccessToken);

            if (!isValidToken)
            {
                return(new
                {
                    Authenticated = false,
                    Message = "Falha ao autenticar"
                });
            }

            var userData = await GetUserData(signInModel.AccessToken);

            var user = await _userManager.FindByEmailAsync(userData.Email);

            if (user == null)
            {
                var appUser = new ApplicationUser
                {
                    Id           = Guid.NewGuid().ToString(),
                    Email        = userData.Email,
                    UserName     = userData.Email,
                    NomeCompleto = userData.Name,
                    LinkFoto     = userData.FacebookPicture.Data.Url.AbsoluteUri,
                    Cpf          = signInModel.Cpf,
                    Endereco     = signInModel.Endereco,
                    Telefone     = signInModel.Telefone,
                };

                var creationResult = await _userManager.CreateAsync(appUser);

                if (!creationResult.Succeeded)
                {
                    return(new
                    {
                        Authenticated = false,
                        Message = "Falha ao criar o usuário"
                    });
                }



                var createdUser = await _userManager.FindByEmailAsync(appUser.Email);

                if (signInModel.Tipo == "PRESTADOR")
                {
                    Prestador prestador = new Prestador
                    {
                        Biografia = signInModel.Biografia,
                        User      = createdUser,
                        Id        = Guid.NewGuid()
                    };

                    await _userManager.AddToRoleAsync(createdUser, Roles.Prestador);

                    _identityDbContext.SaveChanges();
                    _applicationDbContext.Add <Prestador>(prestador);

                    _applicationDbContext.Add <ServicoPrestado>(
                        new ServicoPrestado()
                    {
                        Servico   = _applicationDbContext.Find <Servico>(signInModel.Servico),
                        Prestador = _applicationDbContext.Find <Prestador>(createdUser),
                        Unidade   = _applicationDbContext.Find <UnidadeDeCobranca>(signInModel.UnidadeDeCobranca),
                        Preco     = signInModel.Preco
                    }
                        );

                    _applicationDbContext.SaveChanges();

                    return("Succeeded");
                }
                else if (signInModel.Tipo == "CLIENTE")
                {
                    Contratante contratante = new Contratante
                    {
                        Id   = Guid.NewGuid(),
                        User = createdUser
                    };

                    await _userManager.AddToRoleAsync(createdUser, Roles.Cliente);

                    _identityDbContext.SaveChanges();
                    _applicationDbContext.Add <Contratante>(contratante);
                    _applicationDbContext.SaveChanges();

                    return("Succeeded");
                }

                return(new
                {
                    Authenticated = true,
                    Message = "Usuário criado com sucesso",
                    AccessToken = _accessManager.GenerateToken(user).AccessToken
                });
            }

            return(_accessManager.GenerateToken(user));
        }