[MÚSICA]
Agora que entendemos sobre OAuth 2 e como o Facebook suporta OAuth 2,
vamos passar para este exercício onde configuramos nosso
aplicativo de servidor expresso para fazer uso do Facebook como provedor OAuth 2 para o nosso servidor.
E, ao mesmo tempo, para a nossa aplicação cliente.
Neste exercício vamos contar com o passaporte que
já configuramos em nossa aplicação expressa.
Vamos configurar uma nova estratégia para autenticação com o Facebook
usando esse módulo de nó de token do Facebook passaporte.
Para começar este exercício,
acesse https//developers.facebook.com/apps.
Agora, aqui é onde você vai registrar o aplicativo cliente, que é basicamente o
seu servidor, o servidor extra, agindo como o aplicativo cliente para o Facebook.
E então vamos registrar um aplicativo cliente lá.
E, em seguida, obtenha um ID de aplicativo e um segredo de aplicativo do Facebook.
Agora, obviamente, é evidente que você precisa ter uma conta
no Facebook para poder configurar isso.
Se você não tem uma conta do Facebook e você não deseja fazer este exercício,
então não há nenhum mal em não fazer este exercício.
Mas, claro, para fazer este exercício OAuth 2,
você precisa de uma conta do Facebook para configurar seu provedor OAuth no Facebook.
Então, indo para este site,
developers.facebook.com/apps, você notará que você precisará
fazer login para continuar se você não estiver logado no seu navegador.
Agora você pode ver que eu já configurei alguns aplicativos aqui e
testei-os.
Agora, para criar um novo aplicativo, clique em Adicionar novo aplicativo.
E, em seguida, você pode fornecer o nome para o seu aplicativo.
Então eu posso dizer Confusion3, e então podemos fornecer o e-mail de contato.
E, em seguida, siga o procedimento para criar seu novo aplicativo aqui.
E uma vez que o aplicativo é criado, você notará imediatamente que
há um ID de aplicativo que foi criado para o seu aplicativo.
E, em seguida, para este aplicativo em particular.
Então, se você estiver indo para o painel, você verá
duas informações que você realmente precisa para prosseguir.
Um deles é o ID do aplicativo, portanto, certifique-se de fazer uma cópia do ID do aplicativo.
E o segundo é o segredo do aplicativo.
Então, você pode digitar no botão Mostrar aqui e, em seguida, você vai obter o segredo do aplicativo.
Segredo aqui, como você pode ver, estes dois não são nada além de cordas ASCII.
Então faça uma cópia disso porque você precisa configurar seu servidor especializado e
também seu aplicativo cliente com essas duas informações.
E uma vez que você se apossar disso, então
podemos prosseguir com o resto do exercício.
Você precisará acessar o painel do aplicativo.
E nas configurações, como você pode ver, nas configurações básicas aqui
você acabou de adicionar uma plataforma de site aqui.
E, em seguida, forneça a URL como https//localhost3443.
E salve as alterações aqui na sua aplicação aqui.
Depois de adicionar no site aqui, vá para as configurações avançadas.
E, em seguida, clique em Sim para dizer
aplicativo nativo ou desktop aqui e dizer sim para isso e, em seguida, salvar as alterações.
E na configuração básica nos domínios do aplicativo, digite
https://localhost:3443 e salve as alterações.
Em seguida, vá para as instruções de exercício para este exercício.
E você veria que há um arquivo index.html que
eu forneci nos recursos do exercício.
Baixe este arquivo index.html e mova-o para sua pasta pública.
Então, vamos baixar este arquivo index.html.
Em seguida, indo para a pasta ConfusionServer na pasta pública,
você vê que eu já tenho um arquivo index.html.
Vou substituir isso pelo arquivo index.html baixado
que acabei de obter.
Eu salvei isso na minha área de trabalho.
Então eu vou apenas puxar este index.html e
, em seguida, substituir o arquivo index.html na pasta pública do meu ConfusionServer.
Em seguida, indo para o editor, vamos abrir o arquivo index.html.
E se você abri-lo você verá que eu já configurei algum
código JavaScript aqui.
Este código JavaScript eu peguei do Facebook onde eles
especificam como você pode configurar um aplicativo de desenvolvimento usando isso.
Então, eu copiei isso das instruções do Facebook.
Em particular, você notará que neste arquivo index.html,
há esse campo AppID aqui.
Você vai substituir este campo AppID
pelo ID do cliente que você obteve ao registrar seu aplicativo no Facebook.
Então, aqui, eu estou substituindo o ID deste cliente
pelo ID do meu aplicativo que eu registrei no Facebook aqui.
E você precisa fazer o mesmo passo com o aplicativo
que você registra no Facebook, com o ID do aplicativo que você obtém do Facebook.
E, em seguida, salve as alterações em index.html.
Esta página index.html que eu tenho aqui criará
um botão de login na página index.html, que quando clicado
nos ajudará a fazer login no Facebook e, em seguida, obter um token de acesso do Facebook.
Em seguida, indo para a pasta ConfusionServer,
vamos instalar o módulo de nó de token do Facebook passaporte.
Então, no prompt, digite npm instalar
Passport-Facebook-token e
instale este módulo nó.
E como você pode ver eu estou usando a versão 3.3.0 neste curso.
Voltando ao editor, abra config.js.
E em config.js eu vou adicionar em
uma propriedade chamada 'facebook' no meu arquivo config.js.
E aqui dentro,
configurarei meu ClientID e
o ClientSecret.
Agora, o ClientID será exatamente o que você obtém do Facebook.
Aqui, e o segredo do cliente como você viu quando você registrou seu pedido.
Você obtém uma segunda string lá para copiar essa string e
, em seguida, colá-la no ClientSecret aqui.
Agora certifique-se de que isso é colado como uma string aqui.
Da mesma forma, colando o ClientSecret no meu arquivo config.js.
Então, configurar isso aqui vai me ajudar a usar esses dois onde eu preciso no meu código.
Em seguida, como percebemos, sempre que o usuário
fizer login e, em seguida, obtém o token de acesso e o passa para o nosso servidor expresso.
O servidor expresso vai usar esse token de acesso e ir
buscar as informações do arquivo do Facebook 0 deve servidor.
E então, uma vez que alcança as informações do perfil, nosso servidor expresso
criará uma nova conta de usuário em nosso aplicativo.
E use o ID do Facebook como o índice nesta conta de uso.
Então, para acomodar isso,
vamos para o arquivo user.js onde temos definir nosso modelo.
Então, além do primeiro nome e do sobrenome,
eu também vou adicionar em um campo aqui chamado FacebookID,
que é do tipo String aqui.
O FacebookID armazenará o FacebookID
do usuário que passou no token de acesso.
Na próxima etapa, mostrarei como configurar isso.
Em seguida, configuramos nossa estratégia do Facebook usando o token passaporte Facebook..
Quando um usuário passa no token de acesso,
então você vai buscar o perfil e, em seguida, configurar uma conta para
esse usuário em nosso servidor local aqui, em nosso servidor expresso aqui.
Iremos inicializar o primeiro nome e o sobrenome e o FacebookID.
Mas é claro que esta conta em particular não terá uma senha ou
melhor, o hash instalado associado a isso.
Porque, se um usuário fizer login usando esta conta, então ele terá que usar sua
parte de login no Facebook para fazer login em nosso aplicativo.
Em seguida, vamos autenticar o arquivo dark.js.
Então é aqui que temos estado a configurar todas as nossas diferentes
estratégias de autenticação de passaporte.
Então aqui, além da estratégia jwt e
a estratégia local que eu configurei aqui,
deixe-me criar um FacebookTokenStrategy aqui.
E, em seguida, defina o token de requerer palavra-facebook-.
E isso nos dará uma nova estratégia que podemos
configurar em nosso módulo de passaporte aqui.
Então, indo para o código aqui, bem ali,
no final deste arquivo, vou criar,
FacebookPassport como
passsport.use ().
E então este é o lugar onde eu iria especificar novo FacebookTokenStrategy aqui.
E, em seguida, vamos especificar os detalhes deste
FacebookTokenStrategy, neste ponto aqui.
Então, neste FacebookTokenStrategy, como abordamos esse problema?
Deixe-me apenas embrulhar a palavra envoltório para que você possa ver o código completo.
Então, para o FacebookTokenStrategy, vamos começar dizendo primeiro.
A primeira parte do FacebookTokenStrategy leva o ClientID.
Que temos config em config.facebook.clientID aqui,
e cliente, Secret,
que também temos configurado em, Nosso arquivo de configuração aqui.
Então vamos fornecer isso como o primeiro parâmetro para esta estratégia aqui.
E, em seguida, o segundo parâmetro, é onde
o desafiar a função de retorno de chamada que entra neste ponto.
Então, a função de retorno de chamada aqui obtém três valores.
Então ele recebe AccessStoken,
RefreshToken, perfil e
retorno de chamada chamado como feito aqui.
Então estes são os quatro parâmetros que vêm para a função de retorno de chamada que vamos
configurar neste ponto.
Então deixe-me recuar esse código para que seja um pouco mais claro de ver.
E dentro desta função callback que eu configurei aqui,
eu vou primeiro dizer user.findone.
Então, vamos tentar ver se este usuário do Facebook
em particular fez login mais cedo para que a conta já
estivesse configurada, Com o FaceBookID.
Agora, onde obtemos o FacebookID?
Observe que estamos recebendo esse perfil para o usuário,
vindo aqui, para que você possa ver que este perfil está entrando como um parâmetro.
Este perfil traz muita informação vinda do Facebook que
podemos usar dentro de nossa aplicação.
O AccessStoken, é claro, é fornecido ao servidor pelo usuário.
Então, uma vez que tentamos encontrar pelo menos um usuário com um ID de perfil do Facebook.
Então, se esse usuário existe, então já descobrimos que o usuário já
fez login em nossa conta usando a abordagem do Facebook.
Então, neste caso, podemos avançar caso contrário, criaremos um novo usuário.
Então, a função de retorno de chamada aqui terá dois parâmetros,
o err e o usuário aqui.
E esta função de retorno de chamada como veremos,
bem aqui dentro vamos verificar se (err).
Então, se isso causar um erro, então, é claro,
o que precisamos fazer é retornar feito (err, false).
Então isso feito como você pode ver é a função de retorno de chamada que está vindo como
o parâmetro para esta função aqui, então
vamos chamar o feito com o err e false.
Se não for um erro, então
vamos dizer se (! err
&& usuário! == nulo).
Então, se o usuário não é nulo, então isso significa que temos encontrado um usuário no sistema
que não foi anteriormente com esse FacebookID particular, Então, para o usuário,
tudo o que precisamos fazer é retornar feito (null,) uma vez que não
há nenhum erro aqui, e então vamos retornar o valor do usuário para isso aqui em baixo.
Então, o que significa que, se o usuário já tiver feito login anteriormente usando
a abordagem do Facebook, o usuário já teria sido criado.
E assim, esse usuário será encontrado e, em seguida, nós apenas passar de volta esse usuário.
Se não, veja a parte se não é a parte mais interessante deste exercício.
Se o usuário não existe, então precisamos criar um novo usuário.
Agora, para criar o novo usuário, vamos dizer usuário,
= novo usuário, e quando criamos um novo usuário,
lembre-se que precisamos passar o nome de usuário.
O nome de usuário seria obtido a partir do perfil, e o perfil do Facebook que
retornou terá um campo chamado como DisplayName.
E então esse é o campo que vou usar para criar um novo usuário aqui.
Então vamos criar um novo usuário com o nome de usuário definido
igual ao DisplayName, e depois que o usuário é criado,
então vamos dizer user.facebookId, = profile.id.
Então vamos estar salvando o ID do Facebook do usuário.
Então, retorne neste objeto de perfil aqui e, em
seguida, coloque o ID do Facebook do usuário para o ID do perfil.
Para que, posteriormente, se o mesmo usuário fizer login,
essa pesquisa será capaz de encontrar esse usuário em nosso banco de dados.
E então vamos
dizer user.firstname
= profile.name.givenName
Então, o perfil tem esse objeto nome nele,
que tem um nome e um nome de família associado a isso.
Isso é retornado do perfil do usuário no Facebook.
E também o user.lastname vamos
defini-lo para profile.name.familyName.
E então, uma vez que tenhamos configurado tudo isso, diremos user.save.
Então, estamos salvando as alterações para o usuário e
, em seguida, isso retornará err e o usuário.
Então, ele retornará um erro se o usuário não puder ser criado,
caso contrário ele retornará o usuário criado aqui.
Então, neste caso, vamos dizer, se (err),
então retornará feito (err,
false) porque não conseguimos criar o usuário.
senão, o usuário foi criado com sucesso,
então retornaremos feito (null, usuário).
Então, não importa qual é o caso,
se o usuário existe, então você vai encontrar esse usuário e retornar o valor.
Se o usuário não existir, você criará um novo usuário com base no
perfil do usuário do Facebook que obtivemos.
E, em seguida, adicione o novo usuário em nosso site de servidor, no banco de dados.
Então esta é a estratégia que configuramos para o
nosso passaporte, o novo FacebookTokenStrategy.
Então isso nos permitirá encontrar o usuário.
Então, agora que configuramos nosso aplicativo para
criar um usuário ou encontrar o usuário com base na ID do Facebook.
O último passo é, naturalmente, introduzir
uma nova rota no arquivo users.js.
Então, no arquivo users.js você vai lembrar que tivemos a rota de inscrição que
permite ao usuário se inscrever para a conta local com o nome de usuário e senha.
E então você tem o login que permite ao usuário fazer login usando o nome de usuário e
senha.
Mas agora, vamos usar o Facebook para fazer login no usuário.
Então, neste caso, diremos, router.get,
e o endpoint será /facebook/token.
Então, se o usuário envia uma solicitação get para usuários/facebook/token,
então vamos estar autenticando o usuário usando
a autenticação baseada no Facebook OAuth 2.
Então, aqui, vamos dizer passport.authenticate, e
vamos estar autenticando usando a estratégia facebook-token.
Lembre-se que já tínhamos configurado isso em nosso arquivo authenticate.js,
então vamos configurar o passaporte autenticar facebook-token estratégia e,
em seguida, essa função de retorno que recebe req, res aqui.
Então deixe-me, Alterne o contorno de palavras aqui,
para que você possa ver que este é o roteador.get neste endpoint aqui.
E, em seguida, aqui, vou configurar este aplicativo.
Então, neste ponto, diríamos, se (req.user), agora observe que quando chamamos
passport.authenticate com a estratégia facebook-token.
Isso, se for bem-sucedido,
ele teria carregado no usuário no objeto de solicitação.
Então, no momento em que chegamos a este ponto aqui após o
facebook-token middware passport.authenticate é executado,
você teria o usuário já carregado no objeto request.
Então, se este for o caso, então, vamos dizer, vamos criar um token.
Vamos criar um token web JSON aqui, assim como a forma como
criamos o token web JSON quando o usuário logou aqui.
Então, vamos copiar isso aqui.
Authenticate.getToken, então isso nos dará o token da web JSON.
Então, essencialmente, o usuário está enviando o token de acesso para o servidor express,
o servidor express usa o AccessStoken para ir para o Facebook e
, em seguida, buscar o perfil do usuário.
E se o usuário não existir, criaremos um novo usuário com essa ID do Facebook.
E depois disso, nosso servidor expresso gerará
um token da web JSON e, em seguida, retornará o token da web JSON ao nosso cliente.
Todos os acessos subsequentes de nosso usuário terão que incluir este
token da web JSON que acabamos de retornar usando esta abordagem.
Então, neste momento, você não precisa mais do token de acesso do Facebook.
Você pode descartar o token de acesso do Facebook neste momento porque
o token da Web JSON é aquele que mantém a autenticação de usuários ativa por
qualquer duração que este token da Web JSON esteja ativo.
Agora, além disso, é claro que também precisamos fazer esses passos aqui.
Então, vou copiar essa parte aqui.
porque eu vou fazer exatamente a mesma coisa neste caso também,
então vamos colar nesse código aqui.
Então, vamos dizer StatusCode = 200, tipo de cabeçalho de conteúdo e,
em seguida, diremos res.json que você está logado com sucesso, e é isso.
Então, com essa abordagem, como você pode ver, agora usando uma chamada para este endpoint.
O aplicativo do usuário, o cliente neste caso,
passará o token de acesso do Facebook que acabou de obter do Facebook.
E então nosso servidor expresso usará o token de acesso do Facebook para
verificar o usuário no Facebook.
E, em seguida, se o usuário for reconhecido pelo Facebook como um usuário legítimo,
então nosso servidor expresso retornará um token JSON Wed ao nosso cliente.
E então nosso cliente é autenticado e
, em seguida, pode prosseguir com a realização das outras operações
usando o token JSON wed no cabeçalho de todas as mensagens de solicitação.
Posteriormente, assim como fizemos com a estratégia de autenticação local, é isso.
Então, concluímos todas as atualizações para o nosso aplicativo, vamos salvar as alterações.
Indo para o nosso terminal, vamos iniciar o servidor aqui,
então vamos dizer npm start, e o servidor está funcionando.
E eu notei que eu tinha digitado na porta P-A-S-S-S,
e isso causou um erro aqui.
Portanto, note que como é fácil cometer erros.
Então deixe-me corrigir isso e depois voltar e reiniciar meu servidor.
Então, quando você encontrar erros como esses, não entre em pânico.
Olhe ao redor para ver onde está o problema e, muitas
vezes, será um problema simples como este que causará erros para você.
Novamente, voltando para o users.js e
você vê que no arquivo authenticate.js,
configurei esta porta dizendo P-A-S-S-S.
Então, no arquivo authenticate.js, deixe-me corrigir isso para passsport e,
em seguida, salvar as alterações e, em seguida, reiniciar meu servidor.
Agora, reiniciando meu servidor, então meu servidor está funcionando agora.
Neste ponto, vá para um navegador.
E no navegador, digite https://localhost3443.
Se acontecer de você ter esta página em cache aqui, você pode querer remover o cache.
Ou apenas digite localhost: 3343/index.html, e
então você notará imediatamente que neste index.html,
você verá este botão chamado botão Login.
Então, vamos clicar neste botão de login para fazer login no Facebook.
Vamos entrar e então você aparecerá com esta mensagem aqui.
Se você já fez login no Facebook anteriormente,
ele pedirá permissão para continuar como usuário.
Se não, então ele vai pedir que você faça login no Facebook com e
, em seguida, permitir que você continue.
Desde que eu tinha acabado de entrar no Facebook um pouco mais cedo, então
eu posso apenas clicar em Continuar.
Agora, abra o console JavaScript desenvolvedores na parte inferior aqui.
E no console JavaScript, você vê um monte de mensagens impressas aqui.
E, em particular,
abra este objeto que você verá no console JavaScript.
E dentro deste objeto, você verá esta resposta alt aqui.
E lá dentro, você verá uma ferramenta de acesso presente lá.
Agora, esta é uma resposta que é obtida do Facebook ou
para o servidor de autenticação por nossa aplicação aqui.
E eu vou simplesmente copiar isso,
porque este é o token de acesso que o Facebook nos forneceu.
Agora, eu preciso dar esse token de acesso ao meu servidor expresso
para que ele vá e verifique meu perfil, e então me permita fazer login nesse aplicativo.
Então eu estou fazendo isso de uma maneira apertada
aqui simplesmente porque eu queria mostrar a vocês como o token de acesso vem aqui.
E nós copiamos o token de acesso, então eu vou pegar isso e
usar o Postman para enviar esse token de acesso ao meu servidor Express.
Agora, quando você cria um aplicativo web como Angular, ou
o aplicativo Ionic, ou o aplicativo NativeScript, você não precisa fazer todas essas etapas.
Agora, basicamente, quando o token de acesso é retornado ao seu aplicativo web,
o aplicativo Angular, ou o aplicativo Ionic, ou o aplicativo NativeScript,
você simplesmente capturará esse token de acesso lá.
E então você passará esse token de acesso para o
servidor Express usando o XMLHttpRequest para obter as informações.
Mas desde que eu queria ilustrar manualmente os passos.
Então, eu configurei este index.html com um
código JavaScript simples que o Facebook fornece para mim.
Para que eu possa recuperar este token de autorização que obtivemos do
Facebook.
Então deixe-me copiar este token de autorização.
Agora, vamos para o Postman, e depois tentar
ver como podemos obter o token web JSON do nosso servidor Express.
Agora, indo para Postman, de Postman,
deixe-me agora fazer uma solicitação GET para
LocalHost: 3443sFaceBookToken do usuário.
E quando eu enviar este pedido para esse ponto,
a outra configuração que eu preciso fazer aqui é que,
eu preciso passar neste token de acesso que eu acabei de obter.
Agora, para passar um token de acesso no cabeçalho,
posso passá-lo como um cabeçalho de autorização digitando autorização.
Mas note que o valor deve ser digitado como Beta com um B maiúsculo neste caso
e, em seguida, cole esse token de acesso que obtivemos do Facebook aqui.
Observe o B maiúsculo aqui, e
então você pode passar isso para o nosso servidor.
E, em seguida, após a resposta do nosso servidor,
você veria que você teria obtido o token da web JSON do nosso site do servidor.
Então, esta é uma maneira que você obtém o token da web JSON trocando seu
token de acesso do Facebook que você acabou de obter com seu servidor Express.
E seu servidor Express, por sua vez, irá
obter suas informações de perfil do Facebook e, em
seguida, criar uma conta especificamente para você e,
em seguida, retornar o token da web JSON se tudo for bem sucedido.
Outra maneira de passar essas informações é no cabeçalho,
você digita access_token como a chave.
E no valor, basta digitar o
token de acesso como este aqui, e então você pode enviar o pedido e a mesma coisa.
Ele retornará o token da Web JSON para você.
E então você capturaria o token da Web JSON e, em seguida, continuaria com
o resto dos acessos ao seu servidor expresso usando este token da Web JSON.
Uma terceira abordagem é incluir isso em
sua URL propriamente dita como um parâmetro de consulta.
A terceira abordagem é dizer token? access_token= e
cole o token da Web JSON nesse parâmetro de consulta.
Não use as aspas aqui, apenas o token da Web JSON em si.
E, em seguida, envie o pedido para o seu servidor.
E, em seguida, mesmo assim, seu servidor retornará o token web JSON correspondente.
Assim, você vê três maneiras diferentes de analisar no Token de Acesso do Facebook para
o servidor e, em seguida, obter o token da Web JSON do seu servidor.
E depois disso, o resto desses passos prossegue como antes.
Agora, para convencê-lo de que realmente uma nova conta foi criada com o
perfil do Facebook para este usuário em particular, vamos para o terminal.
No terminal, em uma nova janela do terminal, vou começar a ondulação mongo aqui.
Então, na ondulação mongo, deixe-me dizer, use Confusão.
E então eu vou dizer, db.users.find () .pretty ()
e, em seguida, imprimir todos os usuários que estão registrados no meu sistema.
Você percebe que os três usuários que configuramos nos exercícios anteriores
estão todos lá.
Observe, além disso, um quarto usuário que acabou de ser adicionado no.
E note que para este usuário em particular, ainda não temos o hash na fonte,
mas em vez disso o FacebookID desse usuário está configurado, e
o nome de usuário é configurado para ser esse valor, e o nome de usuário é configurado lá.
E também o sobrenome deveria ter sido criado aqui, mas
eu acho que há um pequeno erro no meu código.
Então eu vou verificar a parte do sobrenome lá.
Indo para authenticate.js.
Deixe-me ver se eu cometi um erro aqui.
Lá vamos nós.
Digitei o nome F-A-M-I-L-Y.
Então, veja, nem eu sou sobre cometer erros.
Então este deve ser FamilyName aqui,
user.lastname profile.name.familyName aqui.
Então deixe-me salvar as alterações, e agora o código deve funcionar corretamente.
Voltando novamente para o terminal,
agora você vê que um novo usuário foi criado com o perfil do Facebook aqui.
Agora, qualquer vez subsequente que eu tentei me autenticar usando Facebook
é o mesmo processo.
Obtive o token de acesso do Facebook e
, em seguida, analiso no token de acesso para o meu servidor expresso.
Meu servidor expresso irá para o Facebook, buscar o perfil e,
em seguida, verificar se o usuário já existe.
E no login subsequente que eu faço usando o Facebook,
eu descobriria que esse usuário em particular já existe no sistema.
Então, ele vai simplesmente avançar e o usuário será autenticado e,
em seguida, o servidor extra irá emitir um token web JSON para o seu
cliente e podemos avançar a partir desse ponto como antes.
Então você vê, configurar a autenticação baseada no OAuth 2 usando um
provedor de serviços OAuth 2 como o Facebook não é tão difícil desde que tenhamos
o módulo apropriado baseado na estratégia de autenticação do Facebook.
Como passaporte Facebook token que já cuida de grande parte
do trabalho em nosso nome e, em seguida, nos permite configurar nosso servidor expresso
para lidar com autenticação de terceiros com base em OAuth 2 do Facebook.
Com isso, completamos este exercício.
Neste exercício, aprendemos como fazer toda a autenticação OAuth 2
usando o Facebook como a autenticação OAuth 2 fornecida.
Este é um bom momento para você salvar as alterações que você fez em
seu Repositório Git com o passaporte de mensagem Facebook.
[ MUSIC]