Questa guida spiega come installare il framework PHP Laravel ed il pacchetto JWT-Auth.
Che cos’è Laravel?
Laravel è un framework open source di tipo MVC scritto in PHP per lo sviluppo di applicazioni web, creato nel 2011 da Taylor Otwell basato su Symfony. Laravel è distribuito con licenza MIT e mantiene tutto il codice disponibile su GitHub
Tools per l’installazione
Per installare laravel bisogna scaricarlo manualmente da GitHub oppure utilizzare composer, esso è uno strumento per creare progetti e gestire le relative dipendenze di un progetto.
Requisiti
- PHP >= 5.6.4
- OpenSSL PHP Extension
- PDO PHP Extension
- Tokenizer PHP Extension
- Mbstring PHP Extension
- XML PHP Extension
Se si è su un server debian-based gli ultimi due requisiti software che solitamente non sono installati insieme al meta-pacchetto AMP, ovvero mbstring ed xml, possono essere installati tramite il seguente comando:
sudo apt install php-xml php-mbstring
Installazione
Per installare Laravel, una volta installato composer, eseguire tramite console questo comando (accanto a prefer ci sono due trattini):
composer create-project –prefer-dist laravel/laravel yourPrj
oppure:
laravel new yourPrj
Troubleshooting: comando laravel non riconosciuto #1 #2
Una volta creato il progetto assegnare i seguenti permessi:
chmod 777 -R storage/
chmod 777 -R storage/logs/
chmod 777 -R storage/framework/cache
chmod 777 -R storage/framework/views
chmod 777 -R storage/framework/sessions
chmod 777 -R bootstrap/cache
Configurare le credenziali per la connessione al database, quindi creare una copia del file .env.example rinominandola in .env:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=nome_database
DB_USERNAME=username
DB_PASSWORD=password
Assicurarsi che nel file .env la stringa APP_KEY non sia vuota, altrimenti eseguire:
php artisan key:generate
Per testare se Laravel è stato installato correttamente andare su http://localhost/yourPrj/public/index.php la schermata che dovrebbe apparire è la seguente
Configurare jwt-Auth
JWT sta per JSON Web Token. JWT servirà per creare l’autenticazione e la connessione front-end e back-end. Inoltre, tramite JWT è possibile creare login/register API.
Questo pacchetto jwt-auth è stato fatto da Tymon ed è reperibile su GitHub.
Per installare jwt-auth usare composer ed installare il pacchetto “tymon/jwt-auth”:
composer require tymon/jwt-auth
composer update
Questi comandi andranno a modificare il file composer.json (attributo require).
Scaricato jwt-auth bisogna:
- Aggungere il seguente provider file config/app.php (riga 138-139)
Tymon\JWTAuth\Providers\JWTAuthServiceProvider::class
- Aggiungere (sempre nel file config/app.php) i seguenti alias (riga 196-198):
‘JWTAuth’ => Tymon\JWTAuth\Facades\JWTAuth::class,
‘JWTFactory’ => Tymon\JWTAuth\Facades\JWTFactory::class
- Generare il file config/jwt.php tramite il seguente comando (nota che accanto a provider ci sono due trattini):
php artisan vendor:publish –provider=”Tymon\JWTAuth\Providers\JWTAuthServiceProvider”
- Generare la secret key per il file config/jwt.php con:
php artisan jwt:generate
- Creare un middleware per “proteggere” le API
php artisan make:middleware authJWT
Il comando sopra creerà un file app/Http/Middleware/authJWT.php, da riempire con il seguente codice:
namespace App\Http\Middleware; use Closure; use JWTAuth; use Exception; class authJWT { public function handle($request, Closure $next) { try { $user = JWTAuth::toUser($request->input('token')); } catch (Exception $e) { if ($e instanceof \Tymon\JWTAuth\Exceptions\TokenInvalidException){ return response()->json(['error'=>'Token is Invalid']); }else if ($e instanceof \Tymon\JWTAuth\Exceptions\TokenExpiredException){ return response()->json(['error'=>'Token is Expired']); }else{ return response()->json(['error'=>'Something is wrong']); } } return $next($request); } }
- Aggiungere il middleware nel file app/Http/Kernel.php all’interno di $routeMiddleware (riga 49-50) incollando la seguente stringa:
‘jwt-auth’ => \App\Http\Middleware\authJWT::class,
- Creare il nuovo controller tramite il comando:php artisan make:controller authController
php artisan make:controller authController
- Riempirlo con il seguente codice:
namespace App\Http\Controllers; use Illuminate\Http\Request; use App\User; use Hash; use JWTAuth; class authController extends Controller { public function register(Request $request) { $input = $request->all(); $input['password'] = Hash::make($input['password']); User::create($input); return response()->json(['result'=>true]); } public function login(Request $request) { $input = $request->all(); if (!$token = JWTAuth::attempt($input)) { return response()->json(['result' => 'wrong email or password.']); } return response()->json(['result' => $token]); } public function get_user_details(Request $request) { $input = $request->all(); $user = JWTAuth::toUser($input['token']); return response()->json(['result' => $user]); } }
- Configurare le route, quindi aggiungere nel file routes/web.php le seguenti righe di codice:
Route::group(['middleware' => ['api'],'prefix' => 'api'], function () { Route::post('register', 'authController@register'); Route::post('login', 'authController@login'); Route::group(['middleware' => 'jwt-auth'], function () { Route::post('get_user_details', 'authController@get_user_details'); }); });
- Commentare nel file /app/Http/Kernel.php la stringa:
\App\Http\Middleware\VerifyCsrfToken::class,
Per testare le API di login e di registrazione account è necessario creare un Database di test, esso si può generare tramite il seguente comando:
php artisan migrate
Creato il database basta inviare una POST request a laravel all’indirizzo http://localhost/yourPrj/public/index.php/api/register con parametri name,email,password per verificare la registrazione account e all’indirizzo …/api/login con parametri email e password per verificare l’API route di login ed ottenere il token di autenticazione.
Per eseguire una chiamata POST basta utilizzare Javascript/Ajax o vari tools come POSTMAN.
Esempio di url per la POST request:
http://localhost/yourPrj/public/index.php/api/register?name=Helias&email=helias@gmail.com&password=helias
http://localhost/yourPrj/public/index.php/api/login?email=helias@gmail.com&password=helias
Si ringrazia Tkd-Alex per la guida. Per qualsiasi cosa commentate qui sotto!