{"id":28510,"date":"2021-06-12T19:08:00","date_gmt":"2021-06-12T16:08:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=28510"},"modified":"2021-10-18T04:00:27","modified_gmt":"2021-10-18T01:00:27","slug":"faca-login-com-o-twitter-no-laravel-usando-o-laravel-socialite","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/pt-pt\/faca-login-com-o-twitter-no-laravel-usando-o-laravel-socialite\/","title":{"rendered":"Fa\u00e7a login com o Twitter no Laravel usando o Laravel Socialite"},"content":{"rendered":"<p>Recentemente publiquei um artigo sobre <a href=\"https:\/\/themewp.inform.click\/pt-pt\/como-adicionar-login-oauth-do-twitter-em-um-site-com-php\/\" title=\"Login com Twitter em PHP\" >Login com Twitter em PHP<\/a>. Um de nossos leitores pediu para escrever um artigo sobre login com Twitter no Laravel. Embora o Laravel seja constru\u00eddo na linguagem de programa\u00e7\u00e3o PHP e eu tenha escrito sobre o login do Twitter em PHP, sei que o tutorial anterior n\u00e3o \u00e9 adequado para o framework Laravel. O Laravel tem sua pr\u00f3pria estrutura de pastas e fluxo de desenvolvimento. Um desenvolvedor deve seguir os padr\u00f5es do Laravel ao construir aplica\u00e7\u00f5es web nele.<\/p>\n<p>O Laravel possui seus pacotes oficiais que auxiliam os desenvolvedores a obter certas funcionalidades. Um dos pacotes \u00e9 <a href=\"https:\/\/laravel.com\/docs\/master\/socialite\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Socialite<\/a>. Usando Socialite, voc\u00ea pode integrar o login social com diferentes provedores como Facebook, Twitter, LinkedIn, Google, etc.<\/p>\n<p>Neste artigo, estudamos <strong>Login com Twitter no Laravel<\/strong> usando o Laravel Socialite.<\/p>\n<h3>Come\u00e7ando<\/h3>\n<p>Vamos come\u00e7ar com a nova instala\u00e7\u00e3o do Laravel. N\u00e3o \u00e9 obrigat\u00f3rio usar uma nova instala\u00e7\u00e3o do Laravel, voc\u00ea tamb\u00e9m pode usar seu projeto existente.<\/p>\n<p>Para instalar o Laravel mais recente, execute o comando abaixo:<\/p>\n<pre><code>composer create-project --prefer-dist laravel\/laravel twitterlogin<\/code><\/pre>\n<p>Ap\u00f3s a instala\u00e7\u00e3o, crie o banco de dados e adicione as credenciais no <code>.env<\/code>arquivo. Estamos construindo um sistema de login, portanto, devemos armazenar os detalhes do usu\u00e1rio no banco de dados.<\/p>\n<p>Este tutorial \u00e9 baseado em Sign in with Twitter, portanto, obteremos a id do Twitter do usu\u00e1rio ap\u00f3s a autentica\u00e7\u00e3o bem-sucedida. Para armazenar esta identifica\u00e7\u00e3o social, estamos adicionando colunas <code>provider<\/code>e <code>provider_id<\/code>\u00e0 tabela de &#8216;usu\u00e1rios&#8217;. A coluna <code>provider<\/code>armazenar\u00e1 o valor como &#8216;twitter&#8217; e uma coluna <code>provider_id<\/code>\u00e9 para o id do Twitter do usu\u00e1rio.<\/p>\n<p>Quando usamos login social, n\u00e3o precisamos armazenar senhas, ent\u00e3o a coluna de senha deve aceitar o valor &#8216;NULL&#8217; como padr\u00e3o. N\u00e3o h\u00e1 garantia de obter o e-mail do usu\u00e1rio ap\u00f3s o login social, portanto, por curiosidade, precisamos definir as colunas do e-mail tamb\u00e9m para aceitar o valor &#8216;NULL&#8217;.<\/p>\n<p>Abra o arquivo de migra\u00e7\u00e3o da tabela de &#8216;usu\u00e1rios&#8217; e adicione o c\u00f3digo abaixo.<\/p>\n<pre><code>\/**\n\u00a0* Run the migrations.\n\u00a0*\n\u00a0* @return void\n\u00a0*\/\npublic function up()\n{\n\u00a0\u00a0\u00a0\u00a0Schema::create('users', function (Blueprint $table) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;increments('id');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;string('name');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;string('email')-&gt;nullable();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;timestamp('email_verified_at')-&gt;nullable();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;string('password')-&gt;nullable();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;string('provider');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;string('provider_id');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;rememberToken();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;timestamps();\n\u00a0\u00a0\u00a0\u00a0});\n}<\/code><\/pre>\n<p>Depois disso, execute o comando de migra\u00e7\u00e3o que criar\u00e1 tabelas em seu banco de dados.<\/p>\n<pre><code>php artisan migrate<\/code><\/pre>\n<p>Voc\u00ea tamb\u00e9m precisa adicionar as colunas <code>provider<\/code>e <code>provider_id<\/code>ao modelo de usu\u00e1rio.<\/p>\n<p><strong>app \/ User.php<\/strong><\/p>\n<pre><code>\/**\n\u00a0* The attributes that are mass assignable.\n\u00a0*\n\u00a0* @var array\n\u00a0*\/\nprotected $fillable = [\n\u00a0\u00a0\u00a0\u00a0'name', 'email', 'password', 'provider', 'provider_id'\n];<\/code><\/pre>\n<h3>Obtenha credenciais do Twitter<\/h3>\n<p>Como vamos integrar o login do Twitter no Laravel, primeiro voc\u00ea precisa obter suas credenciais do Twitter. Siga as etapas abaixo para criar um aplicativo do Twitter e obter suas credenciais.<\/p>\n<ul>\n<li>Fa\u00e7a login na <a href=\"https:\/\/dev.twitter.com\/apps\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">conta de desenvolvedor<\/a> do <a href=\"https:\/\/dev.twitter.com\/apps\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Twitter<\/a> e crie um novo aplicativo.<\/li>\n<li>Preencha todos os campos obrigat\u00f3rios, como o nome e a descri\u00e7\u00e3o do aplicativo.<\/li>\n<li>Adicione o dom\u00ednio do seu site no campo Site.<\/li>\n<li>Defina o URL de retorno como <code>http:\/\/localhost:8000\/twitter\/callback<\/code>. Ajuste o URL de acordo com sua necessidade.<\/li>\n<li>Depois de se registrar, copie e cole as credenciais do aplicativo criado (Chave e Segredo do Consumidor) que exigem algum tempo.<\/li>\n<\/ul>\n<p>Usando essas credenciais copiadas, seu aplicativo Laravel completar\u00e1 o fluxo OAuth quando os usu\u00e1rios entrarem com sua conta do Twitter.<\/p>\n<h3>Criar rotas e controlador<\/h3>\n<p>Para incluir a funcionalidade de login no Twitter, precisamos adicionar um c\u00f3digo em nosso projeto Laravel. Vamos criar um <code>LoginController<\/code>usando o comando:<\/p>\n<pre><code>php artisan make:controller LoginController<\/code><\/pre>\n<p>Precisamos adicionar um link de login no arquivo blade. Crie um <code>login.blade.php<\/code>e adicione o seguinte HTML a ele.<\/p>\n<pre><code>&lt;a href=\"{{ url('\/login\/twitter') }}\" class=\"btn btn-success\"&gt;\n\u00a0\u00a0\u00a0\u00a0{{ __('Login with Twitter') }}\n&lt;\/a&gt;<\/code><\/pre>\n<p>Voc\u00ea pode chamar essa visualiza\u00e7\u00e3o a partir do <code>index<\/code>m\u00e9todo de <code>LoginController<\/code>.<\/p>\n<pre><code>\/**\n\u00a0* Call the view\n\u00a0*\/\npublic function index()\n{\n\u00a0\u00a0\u00a0\u00a0return view('login');\n}<\/code><\/pre>\n<p>Em seguida, adicione a rota para ele. Tamb\u00e9m estou adicionando mais algumas rotas que ser\u00e3o necess\u00e1rias para a pr\u00f3xima parte do tutorial.<\/p>\n<pre><code>Route::get('login', 'LoginController@index');\nRoute::get('login\/{provider}', 'LoginController@redirectToProvider');\nRoute::get('{provider}\/callback', 'LoginController@handleProviderCallback');\nRoute::get('\/home', function() {\n\u00a0\u00a0\u00a0\u00a0return 'User is logged in';\n});<\/code><\/pre>\n<p>Depois que o usu\u00e1rio fizer o login com o Twitter, vou redirecion\u00e1-lo para a <code>home<\/code>rota. \u00c9 apenas para fins de demonstra\u00e7\u00e3o. Voc\u00ea deve alterar esta rota para outra coisa.<\/p>\n<h3>Entrar com o Twitter no Laravel<\/h3>\n<p>\u00c9 hora de usar o pacote Socialite agora. Usando o comando abaixo voc\u00ea pode instalar o pacote Socialite em seu projeto Laravel.<\/p>\n<pre><code>composer require laravel\/socialite<\/code><\/pre>\n<p>Depois de instalar o Socialite, precisamos configur\u00e1-lo. Abra <code>config\/services.php<\/code>e adicione a configura\u00e7\u00e3o do Twitter a este arquivo da seguinte maneira:<\/p>\n<pre><code>'twitter' =&gt; [\n\u00a0\u00a0\u00a0\u00a0'client_id' =&gt; env('TWITTER_API_KEY'),\n\u00a0\u00a0\u00a0\u00a0'client_secret' =&gt; env('TWITTER_API_SECRET_KEY'),\n\u00a0\u00a0\u00a0\u00a0'redirect' =&gt; env('TWITTER_CALLBACK_URL'),\n],<\/code><\/pre>\n<p>Voc\u00ea pode notar que usei o <code>env<\/code>m\u00e9todo para obter os valores especificados. Isso significa que precisamos definir essas constantes no <code>.env<\/code>arquivo.<\/p>\n<pre><code>TWITTER_API_KEY=PASTE_TWITTER_API_KEY\nTWITTER_API_SECRET_KEY=PASTE_TWITTER_API_SECRET_KEY\nTWITTER_CALLBACK_URL=http:\/\/localhost:8000\/twitter\/callback<\/code><\/pre>\n<p>Certifique-se de substituir os marcadores de posi\u00e7\u00e3o pelas chaves de API reais. Em seguida <code>LoginController<\/code>, estamos escrevendo uma fun\u00e7\u00e3o que redireciona um usu\u00e1rio para a p\u00e1gina de login do Twitter e, se a autoriza\u00e7\u00e3o for bem-sucedida, ela far\u00e1 o login do usu\u00e1rio.<\/p>\n<p><strong>LoginController.php<\/strong><\/p>\n<pre><code>&lt;?php\n\u00a0\nnamespace AppHttpControllers;\n\u00a0\nuse IlluminateHttpRequest;\nuse Socialite;\nuse AppModelsUser;\nuse Auth;\n\u00a0\nclass LoginController extends Controller\n{\n\u00a0\u00a0\u00a0\u00a0\/**\n\u00a0\u00a0\u00a0\u00a0\u00a0* Where to redirect users after login.\n\u00a0\u00a0\u00a0\u00a0\u00a0*\n\u00a0\u00a0\u00a0\u00a0\u00a0* @var string\n\u00a0\u00a0\u00a0\u00a0\u00a0*\/\n\u00a0\u00a0\u00a0\u00a0protected $redirectTo = '\/home';\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\/**\n\u00a0\u00a0\u00a0\u00a0\u00a0* Call the view\n\u00a0\u00a0\u00a0\u00a0\u00a0*\/\n\u00a0\u00a0\u00a0\u00a0public function index()\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return view('login');\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\/**\n\u00a0\u00a0\u00a0\u00a0\u00a0* Redirect the user to the Twitter authentication page.\n\u00a0\u00a0\u00a0\u00a0\u00a0*\n\u00a0\u00a0\u00a0\u00a0\u00a0* @return Response\n\u00a0\u00a0\u00a0\u00a0\u00a0*\/\n\u00a0\u00a0\u00a0\u00a0public function redirectToProvider($provider)\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return Socialite::driver($provider)-&gt;redirect();\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\/**\n\u00a0\u00a0\u00a0\u00a0\u00a0* Obtain the user information from Twitter.\n\u00a0\u00a0\u00a0\u00a0\u00a0*\n\u00a0\u00a0\u00a0\u00a0\u00a0* @return Response\n\u00a0\u00a0\u00a0\u00a0\u00a0*\/\n\u00a0\u00a0\u00a0\u00a0public function handleProviderCallback($provider)\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$user = Socialite::driver($provider)-&gt;user();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$authUser = $this-&gt;findOrCreateUser($user, $provider);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Auth::login($authUser, true);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return redirect($this-&gt;redirectTo);\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\/**\n\u00a0\u00a0\u00a0\u00a0\u00a0* If a user has registered before using social auth, return the user\n\u00a0\u00a0\u00a0\u00a0\u00a0* else, create a new user object.\n\u00a0\u00a0\u00a0\u00a0\u00a0* @param\u00a0 $user Socialite user object\n\u00a0\u00a0\u00a0\u00a0\u00a0* @param $provider Social auth provider\n\u00a0\u00a0\u00a0\u00a0\u00a0* @return\u00a0 User\n\u00a0\u00a0\u00a0\u00a0\u00a0*\/\n\u00a0\u00a0\u00a0\u00a0public function findOrCreateUser($user, $provider)\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$authUser = User::where('provider_id', $user-&gt;id)-&gt;first();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if ($authUser) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return $authUser;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return User::create([\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'name'\u00a0\u00a0\u00a0\u00a0 =&gt; $user-&gt;name,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'email'\u00a0\u00a0\u00a0 =&gt; $user-&gt;email,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'provider' =&gt; $provider,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'provider_id' =&gt; $user-&gt;id\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]);\n\u00a0\u00a0\u00a0\u00a0}\n}<\/code><\/pre>\n<p>V\u00e1 para a p\u00e1gina de login e clique no link &#8216;Login com Twitter&#8217;. Conclua o processo e voc\u00ea deve fazer login no sistema usando o Twitter. Voc\u00ea tamb\u00e9m pode encontrar entradas de usu\u00e1rios na <code>users<\/code>tabela.<\/p>\n<p>Espero que voc\u00ea aprenda sobre como fazer o login com o Twitter no Laravel usando o pacote Socialite. Eu gostaria de ouvir suas opini\u00f5es ou sugest\u00f5es na se\u00e7\u00e3o de coment\u00e1rios abaixo.<\/p>\n<h4>Artigos relacionados<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/pt-pt\/faca-login-com-o-linkedin-no-laravel-usando-o-laravel-socialite\/\" title=\"Fa\u00e7a login com o LinkedIn no Laravel usando o Laravel Socialite\">Fa\u00e7a login com o LinkedIn no Laravel usando o Laravel Socialite<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pt-pt\/login-do-google-no-laravel-usando-laravel-socialite\/\" title=\"Login do Google no Laravel usando Laravel Socialite\">Login do Google no Laravel usando Laravel Socialite<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte de grava\u00e7\u00e3o:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Neste tutorial, estudamos Login com Twitter no Laravel usando o pacote Laravel Socialite. O login social ajuda voc\u00ea a pular o todo<\/p>\n","protected":false},"author":1,"featured_media":20252,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[502],"tags":[848],"class_list":["post-28510","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-laravel","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/posts\/28510","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/comments?post=28510"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/posts\/28510\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/media\/20252"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/media?parent=28510"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/categories?post=28510"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/tags?post=28510"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}