Step by step example project with api in Laravel 5.8, front with Angular 8 and authentication with Laravel Passport.
$ sudo apt install apache2$ sudo ufw allow in "Apache Full"$ sudo apt install mysql-server$ sudo mysql_secure_installationGRANT ALL PRIVILEGES ON *.* TO '**<user>**'@'localhost';
FLUSH PRIVILEGES;
$ sudo apt install php libapache2-mod-php php-mysql php-curl php-cli php-xml php-mbstring php-xmlrpc php-intl php-zip php-gd$ sudo nano /etc/apache2/mods-enabled/dir.conf<IfModule mod_dir.c>
DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm
</IfModule>
$ sudo systemctl restart apache2$ sudo apt install nodejs$ sudo apt install npm$ sudo apt install git-all"Instalação do Adminer "Personalizado" para administrar o MySQL Repositório
$ cd /var/www/html
$ sudo git clone https://bitbucket.org/edgvi10/adminer-custom.git adminerPara agregar as permissões aos diretórios
$ sudo chown -R www-data:www-data /var/www/html$ sudo chmod 775 server/ -R$ sudo usermod -a -G www-data obatagAdicionar este código ao 000-default.conf (ou criar um arquivo separado de configuração)
<VirtualHost *:8000>
DocumentRoot /var/www/html/server/public/
<Directory "/var/www/html/server/public/">
Options FollowSymLinks MultiViews
Order Allow,Deny
Allow from all
RewriteEngine On
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
$ sudo a2enmod rewrite$ sudo nano /etc/apache2/apache2.conf$ git clone https://github.com/luzmoraes/Start-Project-API.git$ cd Start-Project-API
$ composer install- Abrir o arquivo .env.example e salvar como .env;
- Criar banco de dados;
- informar os dados do banco de dados no .env;
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=db_start_project
DB_USERNAME=
DB_PASSWORD=
$ php artisan key:generate$ php artisan migrate$ php artisan db:seed$ php artisan pasport:install
# Saída
Personal access client created successfully.
Client ID: 1
Client secret: sqdPI6R8MUyRqgMrSt0B9hXTPCcG9HuN6UBC27Lg
Password grant client created successfully.
Client ID: 2
Client secret: gUuXd05wbnpuahu5VzlnK718T6qq2Tj2uhXe8BxXCopie o Client secret do ID 2 e cole no environment do Angular
export const environment = {
production: false,
apiUrl: 'http://localhost:8000',
clientInfo: {
"grant_type": "password",
"client_id": 2,
"client_secret": "gUuXd05wbnpuahu5VzlnK718T6qq2Tj2uhXe8BxX",
"username": "",
"password": "",
"scope": ""
}
};
$ php artisan serveVersão 5.8 no meomento Documentação
composer create-project --prefer-dist laravel/laravel project-name
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=nome_do_bd
DB_USERNAME=username
DB_PASSWORD=password
OBS.: Ao instalar o Laravel ele já cria por padrão uma migration Users e uma Password Resets.
3) Criar um Seeds para quando criar nossa tabela através do artsan migrate já inserir um usuário nessa tabela.
php artisan make:seeder UsersTableSeeder
O Laravel já cria uma Model para User e uma Factory, o Seeder vai criar um usuário baseado na model, se a senha não for informada no Seeder ela é definida como “secret” por padrão na Factory (database/factories).
<?php
use Illuminate\Database\Seeder;
class UsersTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
factory(App\User::class)->create([
'name' => 'Anderson Moraes',
'email' => 'anderson.b4w@gmail.com',
'created_at' => Carbon::now(),
]);
}
}
4) No DatabaseSeeder, descomentar a linha abaixo para que o seeder criado seja chamado ao executarmos o artsan migate.
$this->call(UsersTableSeeder::class);
php artisan migrate --seed
É necessário --seed para que a tabela seja criada já com os dados de usuário informado no seed criado.
Documentação Passport. Para começar, instale o Passport através do gerenciador de pacotes do Composer:
$ composer require laravel/passportO provedor de serviços Passport registra seu próprio diretório de migração de banco de dados com a estrutura, portanto, você deve migrar seu banco de dados depois de instalar o pacote. As migrações do Passport criarão as tabelas que seu aplicativo precisa para armazenar clientes e acessar tokens:
$ php artisan migrateEm seguida, você deve executar o comando. Esse comando criará as chaves de criptografia necessárias para gerar tokens de acesso seguro. Além disso, o comando criará clientes de "acesso pessoal" e "concessão de senha", que serão usados para gerar tokens de acesso: passport:install
$ php artisan passport:installDepois de executar este comando, adicione o traço ao seu modelo. Este atributo fornecerá alguns métodos auxiliares ao seu modelo, que permitem inspecionar os escopos e tokens do usuário autenticado: Laravel\Passport\HasApiTokensApp\User
# User Model
<?php
namespace App;
use Laravel\Passport\HasApiTokens;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
use HasApiTokens, Notifiable;
}
Em seguida, você deve chamar o método dentro do método do seu . Esse método registrará as rotas necessárias para emitir tokens de acesso e revogar tokens de acesso, clientes e tokens de acesso pessoal: Passport::routesbootAuthServiceProvider
# app/Providers/AuthServiceProvider.php
<?php
namespace App\Providers;
use Laravel\Passport\Passport;
use Illuminate\Support\Facades\Gate;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
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();
}
}
$params = [
'grant_type' => 'password',
'client_id' => 'client-id',
'client_secret' => 'client-secret',
'username' => 'taylor@laravel.com',
'password' => 'my-password',
'scope' => '',
];
# Route: 127.0.0.1:8000/oauth/token
# config/auth.php
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'passport',
'provider' => 'users',
'hash' => false,
],
],
$ php artisan make:controller Api/UserController --resourceRetorna os dados do usuário logado
use Illuminate\Support\Facades\Auth;
public function getUser()
{
return Auth::user();
}
Faz logout do usuário
use Illuminate\Support\Facades\Auth;
public function logout() {
$user = Auth::user()->token();
$user->revoke();
return response()->json([
"success" => true,
"message" => "Successfully logged out"
]);
}
// Rotas Privadas
Route::group([
'middleware' => 'auth:api',
'namespace' => 'Api\\'
], function () {
Route::name('user::')->prefix('user')->group(function () {
Route::get('me', 'UserController@getUser');
Route::get('logout', 'UserController@logout');
});
});
Cabeçalho para testes no POSTMAN
Accept: application/Json
Authorization: Bearer _TOKEN
Instalar a biblioteca https://github.com/barryvdh/laravel-cors.