OAUTH2 LARAVEL
Creacion de Proyecto
> composer create-project --prefer-dist laravel/laravel Passport
Levantar servidor local
> php -S localhost:80 -t ./public
Ubicar la carpeta config/app.php y en la sección “providers” agregar “Laravel\Passport\PassportServiceProvider::class”
'providers' => [
/*
* Laravel Framework Service Providers...
*/
Illuminate\Auth\AuthServiceProvider::class,
Illuminate\Broadcasting\BroadcastServiceProvider::class,
Illuminate\Bus\BusServiceProvider::class,
Illuminate\Cache\CacheServiceProvider::class,
Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class,
Illuminate\Cookie\CookieServiceProvider::class,
Illuminate\Database\DatabaseServiceProvider::class,
Illuminate\Encryption\EncryptionServiceProvider::class,
Illuminate\Filesystem\FilesystemServiceProvider::class,
Illuminate\Foundation\Providers\FoundationServiceProvider::class,
Illuminate\Hashing\HashServiceProvider::class,
Illuminate\Mail\MailServiceProvider::class,
Illuminate\Notifications\NotificationServiceProvider::class,
Illuminate\Pagination\PaginationServiceProvider::class,
Illuminate\Pipeline\PipelineServiceProvider::class,
Illuminate\Queue\QueueServiceProvider::class,
Illuminate\Redis\RedisServiceProvider::class,
Illuminate\Auth\Passwords\PasswordResetServiceProvider::class,
Illuminate\Session\SessionServiceProvider::class,
Illuminate\Translation\TranslationServiceProvider::class,
Illuminate\Validation\ValidationServiceProvider::class,
Illuminate\View\ViewServiceProvider::class,
Laravel\Passport\PassportServiceProvider::class,
Luego en la consola ejecutar
> composer require laravel/Passport
Configurar el archivo .env
DB_DATABASE=passport
DB_USERNAME=root
DB_PASSWORD=
Ejecutar en la consola
> php artisan migrate
Si lanza un error, ubicar el archivo app/Providers/AppServiceProvider.php
y adicionar:
* use Illuminate\Support\Facades\Schema;
* Schema::defaultStringLength(191);
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Schema;
class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*
* @return void
*/
public function register()
{
//
}
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Schema::defaultStringLength(191);
}
}
Nos dirigimos a app/User.php y adicionamos:
* use Laravel\Passport\HasApiTokens;
* use HasApiTokens, Notifiable;
<?php
namespace App;
use Laravel\Passport\HasApiTokens;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
class User extends Authenticatable
{
use HasApiTokens, Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
…
}
Nos dirigimos a app/Providers/ AuthServiceProvider.php y agregamos:
* use Laravel\Passport\Passport;
<?php
namespace App\Providers;
use Laravel\Passport\Passport;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Gate;
class AuthServiceProvider extends ServiceProvider
{
…
}
Ahora nos dirigimos a config\auth.php y modificamos:
'api' => [
'driver' =>
'passport',
'provider' =>
'users',
'hash' => false,
],
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'passport',
'provider' => 'users',
'hash' => false,
],
],
Luego en la consola ejecutar (solo en caso de querer interfaces de
login):
> php artisan make:auth
Luego ejecutar en la consola para crear las llaves:
$ php artisan passport:install
Encryption keys generated successfully.
Personal access client created successfully.
Client ID: 1
Client secret: UBZlgkptMJQa4qwNQQdUOMD0Vq647GmlK1zxKAjj
Password grant client created successfully.
Client ID: 2
Client secret: ZlCFY4hTKxLQFJieXKSJOylF7wzi8kwIBAhWSCAD
Ahora registraremos las rutas de Passport en
app/Providers/AuthServiceProvider.php:
Passport::routes();
<?php
namespace App\Providers;
use Laravel\Passport\Passport;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Gate;
class AuthServiceProvider extends ServiceProvider
{
/**
* The policy mappings for the application.
*
* @var array
*/
protected $policies = [
// 'App\Model' => 'App\Policies\ModelPolicy',
];
/**
* Register any authentication / authorization services.
*
* @return void
*/
public function boot()
{
$this->registerPolicies();
Passport::routes();
}
}
Para ver la lista de rutas que se han generado, ejecutamos en la
consola:
$ php artisan route:list
Crearemos un archivo en app/resources/views/client.blade.php
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Clientes</title>
</head>
<body>
<form action="{{url('/oauth/clients')}}" method="POST">
<p>
<input type="text" name="name" />
</p>
<p>
<input type="text" name="redirect" />
</p>
<p>
<input type="submit" name="send" value="Enviar">
</p>
{{csrf_field()}}
</form>
</body>
</html>
Ahora agregar una ruta en routes/web.php para acceder a nuestra vista.
Route::get('/client', function () {
return view('client');
})->middleware('auth');
0 Comentarios