Questa guida spiega come installare il framework PHP Laravel ed il pacchetto JWT-Auth.

Come creare un progetto con Laravel

 

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.

Download Composer

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

Come creare un progetto con Laravel

Per testare se Laravel è stato installato correttamente andare su  http://localhost/yourPrj/public/index.php la schermata che dovrebbe apparire è la seguente

Come creare un progetto con Laravel

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

Come creare un progetto con Laravel

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

Come creare un progetto con Laravel Come creare un progetto con Laravel

 

  • 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

Come creare un progetto con Laravel

 

  • 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”

Come creare un progetto con Laravel

 

  • Generare la secret key per il file config/jwt.php con:

php artisan jwt:generate

Come creare un progetto con Laravel

 

  • 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);
    }
}
Come creare un progetto con Laravel

 

  • 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,

Come creare un progetto con Laravel

 

  • Creare il nuovo controller tramite il comando:php artisan make:controller authController

php artisan make:controller authController

Come creare un progetto con Laravel

 

  • 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');
    });
});
Come creare un progetto con Laravel

 

  • Commentare nel file /app/Http/Kernel.php la stringa:

\App\Http\Middleware\VerifyCsrfToken::class,

Come creare un progetto con Laravel

 

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!