Meus sites


Sites relevantes


Contato

Email: devanon.kyosha@gmail.com

Sejam bem vindos

Fabrício Web Home Page

Desenvolvimento PHP Laravel, Manutenção em sites PHP, Arquitetura de serviços Web, Geração de endpoints REST API e Tutoriais.

Sejam bem vindos à página Fabrício Web. Eu sou o Fabrício Dias.
Passarei aqui uma parte significativa de minha experiência. Acompanhe minhas publicações. Vou publicar amenidades nerds também. O site está em desenvolvimento, e vou colocar melhorias ainda. E com certeza vou adicionar interação com o leitor em breve.

Fabrício Dias de Oliveira

Laravel - Autenticação através do Google

A autententicação é um processo necessário em uma aplicação. E fica melhor ainda quando diferentes aplicações fazem a autenticação por uma única lista de usuários, com todos os seus dados centralizados em um único lugar. o Google disponibiliza isso, e nos permite usar seus dados para fazer cadastros automáticos de usuários em nosso sistema.

Instale o plugin Socialite - documentação aqui https://laravel.com/docs/5.6/socialite.

composer require laravel/socialite "^3.2.0"

Configure o arquivo config/services.php e insira estas variáves, exatamente como está escrito.

'google' => [
'client_id' => env('GOOGLE_CLIENT_ID'),
'client_secret' => env('GOOGLE_CLIENT_SECRET'),
'redirect' => env('GOOGLE_REDIRECT')
],

Configure o provedor de serviço em config/app.php e adicione a classe do Socialite.

Laravel\Socialite\SocialiteServiceProvider::class,

E ainda no config/app.php no final do arquivo, adicione o aliase do Socialite.

'aliases' => [
// ...
'Socialite' => Laravel\Socialite\Facades\Socialite::class,
]

E crie o esqueleto padrão para autenticação do Laravel.

php artisan make:auth

No Google, crie um projeto em https://console.cloud.google.com/projectcreate e configure as credenciais do projeto em https://console.developers.google.com/apis/credentials.

Clique no nome do projeto para configurá-lo. Na configuração, pegue os identificadores dele ID do cliente e Chave secreta do cliente. E configure a URI de direcionamento. Adicione http://localhost:8000/callback e http://localhost:8000/redirect - as URI devem permanecer na configuração para eventual manutenção, e as URLs de produção serão adicionadas à lista posteriormente. No fim do projeto, serão 4 URLs na lista.

No arquivo .env, configure as variáveis que foram colocadas em config/services.php.

GOOGLE_CLIENT_ID=000000000000-XXXXXXXXXXX.apps.googleusercontent.com
GOOGLE_CLIENT_SECRET=XXXXXXXXXXXXX
GOOGLE_REDIRECT=http://localhost:8000/callback

Habilite o login do G+ em https://console.cloud.google.com/apis/api/plus.googleapis.com/overview. O G+ foi descontinuado pelo Google, mas esta versão do Socialite exige este passo. Versões mais atuais dispensam isso.

Adicione as rotas da autenticação.

Route::get('/redirect', 'Auth\LoginController@redirectToProvider');
Route::get('/callback', 'Auth\LoginController@handleProviderCallback');

Agora edite app/http/controllers/Auth/LoginController.php, adicione nas cláusulas use.

use App\User;
use Illuminate\Support\Facades\Auth;
use Laravel\Socialite\Facades\Socialite;

E os métodos:

public function redirectToProvider() {
return Socialite::driver('google')->redirect();
}

/**
* Obtain the user information from Google.
*
* @return \Illuminate\Http\Response
*/

public function handleProviderCallback() {
    try {
        $user = Socialite::driver('google')->stateless()->user();
    } catch (\Exception $e) {
        return redirect('/login');
    } // check if they're an existing user
    $existingUser = User::where('email', $user->email)->first();
    if ($existingUser) {
        // log them in
        Auth::login($existingUser);
    } else {
        // create a new user
        $userStore = new User();
        $newUser = [
            'name' => $user->name,
            'email' => $user->email,
            'google_id' => $user->id,
            'avatar' => $user->avatar,
            'avatar_original' => $user->avatar_original,
        ];
        $userStore->store($newUser);
        $existingUser = User::where('email', $user->email)->first();
        Auth::login($existingUser);
    }
    return redirect()->to('/home');
}

 

Edite app/user.php. Adicione o método.

public function store(array $options = [])

{

User::query()->insert($options);

}

Atualize a tabela de migração da tabela user, apague todos os campos e coloque estes.

public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('google_id');
$table->string('email')->unique();
$table->string('password')->nullable();
$table->string('avatar')->nullable();
$table->string('avatar_original')->nullable();
$table->rememberToken();
$table->timestamps();
});
}

E por fim, execute php artisan migrate.

O plugin Socialite pode logar em qualquer uma das redes sociais, basta fazer a configuração correta.

Fabrício Dias de Oliveira

Procurar artigos