{"id":15188343,"url":"https://github.com/anayarojo/laravel-jwt","last_synced_at":"2026-02-24T19:39:57.418Z","repository":{"id":55261218,"uuid":"250107636","full_name":"anayarojo/laravel-jwt","owner":"anayarojo","description":"Proyecto en Laravel con autenticación JWT","archived":false,"fork":false,"pushed_at":"2021-01-05T22:48:01.000Z","size":446,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-01-10T01:37:19.648Z","etag":null,"topics":["jwt","laravel54"],"latest_commit_sha":null,"homepage":"http://laravel-jwt.ranayarojo.com/","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/anayarojo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-03-25T22:39:52.000Z","updated_at":"2020-04-06T01:57:28.000Z","dependencies_parsed_at":"2022-08-14T18:13:40.168Z","dependency_job_id":null,"html_url":"https://github.com/anayarojo/laravel-jwt","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anayarojo%2Flaravel-jwt","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anayarojo%2Flaravel-jwt/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anayarojo%2Flaravel-jwt/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anayarojo%2Flaravel-jwt/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/anayarojo","download_url":"https://codeload.github.com/anayarojo/laravel-jwt/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240970218,"owners_count":19886526,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["jwt","laravel54"],"created_at":"2024-09-27T19:03:48.638Z","updated_at":"2025-10-25T06:11:32.912Z","avatar_url":"https://github.com/anayarojo.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Laravel JWT\nProyecto en Laravel con autenticación JWT\n\n### Inicio rápido\n\nComando para clonar proyecto:\n\n###### HTTPS\n```php\ngit clone https://github.com/anayarojo/laravel-jwt.git\n```\n\n###### SSH\n```php\ngit clone git@github.com:anayarojo/laravel-jwt.git\n```\n\nComando para ir a la carpeta del proyecto:\n```php\ncd laravel-jwt\n```\n\nComando para instalar los paquetes composer:\n```php\ncomposer install\n```\n\nComando para instalar los paquetes de node:\n```php\nnpm install\n```\n### API\n\u003cdetails\u003e\n  \u003csummary\u003eMostrar\u003c/summary\u003e\u003cp\u003e\u003c/p\u003e\n\n#### Register\n\nMethod: `POST`\n\nURL: `{{host}}/api/register`\n\nBody:\n```json\n{\n\t\"name\": \"{{name}}\",\n\t\"email\": \"{{email}}\",\n\t\"password\": \"{{password}}\",\n\t\"password_confirmation\": \"{{password}}\"\n}\n```\n\nResponse:\n```json\n{\n    \"user\": {\n        \"name\": \"Test1\",\n        \"email\": \"test1@email.com\",\n        \"updated_at\": \"2020-03-26 19:05:51\",\n        \"created_at\": \"2020-03-26 19:05:51\",\n        \"id\": 2\n    },\n    \"token\": \"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9sYXJhdmVsLWp3dC5yYW5heWFyb2pvLmNvbVwvXC9hcGlcL3JlZ2lzdGVyIiwiaWF0IjoxNTg1MjQ5NTUxLCJleHAiOjE1ODUyNTMxNTEsIm5iZiI6MTU4NTI0OTU1MSwianRpIjoidHlrMlpkVXhwZTF6bDcybyIsInN1YiI6MiwicHJ2IjoiMjNiZDVjODk0OWY2MDBhZGIzOWU3MDFjNDAwODcyZGI3YTU5NzZmNyJ9.ApagcOAEUBQYL2BeEYDuiiEAK2HElOuV84mshs6ScNg\"\n}\n```\n\n#### Login\n\nMethod: `POST`\n\nURL: `{{host}}/api/login`\n\nBody:\n```json\n{\n\t\"email\": \"{{email}}\",\n\t\"password\": \"{{password}}\"\n}\n```\n\nResponse:\n```json\n{\n    \"token\": \"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9sYXJhdmVsLWp3dC5yYW5heWFyb2pvLmNvbVwvXC9hcGlcL3JlZ2lzdGVyIiwiaWF0IjoxNTg1MjQ5NTUxLCJleHAiOjE1ODUyNTMxNTEsIm5iZiI6MTU4NTI0OTU1MSwianRpIjoidHlrMlpkVXhwZTF6bDcybyIsInN1YiI6MiwicHJ2IjoiMjNiZDVjODk0OWY2MDBhZGIzOWU3MDFjNDAwODcyZGI3YTU5NzZmNyJ9.ApagcOAEUBQYL2BeEYDuiiEAK2HElOuV84mshs6ScNg\"\n}\n```\n\n#### Open\n\nMethod: `GET`\n\nURL: `{{host}}/api/open`\n\nResponse:\n```json\n{\n    \"data\": \"This data is open and can be accessed without the client being authenticated\"\n}\n```\n\n#### Closed\n\nMethod: `GET`\n\nURL: `{{host}}/api/closed`\n\nHeaders:\n```json\n    \"Authorization\": \"Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9sYXJhdmVsLWp3dC5yYW5heWFyb2pvLmNvbVwvXC9hcGlcL2xvZ2luIiwiaWF0IjoxNTg1MTkwMDMxLCJleHAiOjE1ODUxOTM2MzEsIm5iZiI6MTU4NTE5MDAzMSwianRpIjoiS3R6bDdWckE0SXh6OE1heSIsInN1YiI6MSwicHJ2IjoiMjNiZDVjODk0OWY2MDBhZGIzOWU3MDFjNDAwODcyZGI3YTU5NzZmNyJ9.5NNXWCFh6o1d1vv-goRA8l1OhfmWFh9HHBR5fO7YRn0\"\n```\n\nResponse:\n```json\n{\n    \"data\": \"This data is open and can be accessed without the client being authenticated\"\n}\n```\n\n\u003c/details\u003e\n\n### Proceso de desarrollo\n\n\u003cdetails\u003e\n  \u003csummary\u003eMostrar\u003c/summary\u003e\u003cp\u003e\u003c/p\u003e\n\nEjecutar comando para crear proyecto Laravel:\n```bash\ncomposer create-project --prefer-dist laravel/laravel laravel-jwt \"5.4.*\"\n```\n\nEjecutar comando para instalar los paquetes composer:\n```bash\ncomposer install\n```\n\nEjecutar comando para instalar los paquetes node:\n```bash\nnpm install\n```\n\nEjecutar comando para instalar JWT authentication:\n```bash\ncomposer require tymon/jwt-auth:dev-develop --prefer-source\n```\n\nAgregar el siguiente provider al array de providers en el archivo config/app.php:\n\n```php\n[...]\nTymon\\JWTAuth\\Providers\\LaravelServiceProvider::class,\n[...]\n```\n\nAgregar los siguientes alias al array de alias:\n```bash\n[...]\n'JWTAuth' =\u003e Tymon\\JWTAuth\\Facades\\JWTAuth::class, \n'JWTFactory' =\u003e Tymon\\JWTAuth\\Facades\\JWTFactory::class,\n[...]\n```\n\nEjecutar comando para crear archivo de configuración para la autenticación JWT:\n```bash\nphp artisan vendor:publish --provider=\"Tymon\\JWTAuth\\Providers\\LaravelServiceProvider\"\n```\n\nEjecutar comando para crear llave secreta para la autenticación JWT en el archivo .env:\n```bash\nphp artisan jwt:secret\n```\n\nImplementar JWTSubject en el modelo User de la siguiente manera:\n```php\n\u003c?php\n\nnamespace App;\n\nuse Illuminate\\Notifications\\Notifiable;\nuse Illuminate\\Foundation\\Auth\\User as Authenticatable;\nuse Tymon\\JWTAuth\\Contracts\\JWTSubject;\n\nclass User extends Authenticatable implements JWTSubject\n{\n    use Notifiable;\n\n    /**\n        * The attributes that are mass assignable.\n        *\n        * @var array\n        */\n    protected $fillable = [\n        'name', 'email', 'password',\n    ];\n\n    /**\n        * The attributes that should be hidden for arrays.\n        *\n        * @var array\n        */\n    protected $hidden = [\n        'password', 'remember_token',\n    ];\n\n    public function getJWTIdentifier()\n    {\n        return $this-\u003egetKey();\n    }\n    public function getJWTCustomClaims()\n    {\n        return [];\n    }\n}\n```\n\nConfigurar conexión con la base de datos en el archivo .env:\n```bash\nDB_CONNECTION=mysql\nDB_HOST=127.0.0.1\nDB_PORT=3306\nDB_DATABASE=homestead\nDB_USERNAME=homestead\nDB_PASSWORD=secret\n```\n\nEjecutar comando para crear tablas del proyecto en la base de datos:\n```\nphp artisan migrate\n```\n\n\nEjecutar comandos para crear controladores:\n```bash\nphp artisan make:controller UserController \nphp artisan make:controller DataController\n```\n\nImplementar UserController de la siguiente manera:\n```php\n\u003c?php\n\nnamespace App\\Http\\Controllers;\n\nuse App\\User;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\Hash;\nuse Illuminate\\Support\\Facades\\Validator;\nuse JWTAuth;\nuse Tymon\\JWTAuth\\Exceptions\\JWTException;\n\nclass UserController extends Controller\n{\n    public function authenticate(Request $request)\n    {\n        $credentials = $request-\u003eonly('email', 'password');\n\n        try {\n            if (! $token = JWTAuth::attempt($credentials)) {\n                return response()-\u003ejson(['error' =\u003e 'invalid_credentials'], 400);\n            }\n        } catch (JWTException $e) {\n            return response()-\u003ejson(['error' =\u003e 'could_not_create_token'], 500);\n        }\n\n        return response()-\u003ejson(compact('token'));\n    }\n\n    public function register(Request $request)\n    {\n            $validator = Validator::make($request-\u003eall(), [\n            'name' =\u003e 'required|string|max:255',\n            'email' =\u003e 'required|string|email|max:255|unique:users',\n            'password' =\u003e 'required|string|min:6|confirmed',\n        ]);\n\n        if($validator-\u003efails()){\n                return response()-\u003ejson($validator-\u003eerrors()-\u003etoJson(), 400);\n        }\n\n        $user = User::create([\n            'name' =\u003e $request-\u003eget('name'),\n            'email' =\u003e $request-\u003eget('email'),\n            'password' =\u003e Hash::make($request-\u003eget('password')),\n        ]);\n\n        $token = JWTAuth::fromUser($user);\n\n        return response()-\u003ejson(compact('user','token'),201);\n    }\n\n    public function getAuthenticatedUser()\n        {\n                try {\n\n                        if (! $user = JWTAuth::parseToken()-\u003eauthenticate()) {\n                                return response()-\u003ejson(['user_not_found'], 404);\n                        }\n\n                } catch (Tymon\\JWTAuth\\Exceptions\\TokenExpiredException $e) {\n\n                        return response()-\u003ejson(['token_expired'], $e-\u003egetStatusCode());\n\n                } catch (Tymon\\JWTAuth\\Exceptions\\TokenInvalidException $e) {\n\n                        return response()-\u003ejson(['token_invalid'], $e-\u003egetStatusCode());\n\n                } catch (Tymon\\JWTAuth\\Exceptions\\JWTException $e) {\n\n                        return response()-\u003ejson(['token_absent'], $e-\u003egetStatusCode());\n\n                }\n\n                return response()-\u003ejson(compact('user'));\n        }\n}\n```\n\nImplementar DataController de la siguiente manera:\n```php\n\u003c?php\n\nnamespace App\\Http\\Controllers;\n\nuse Illuminate\\Http\\Request;\n\nclass DataController extends Controller\n{\n        public function open() \n        {\n            $data = \"This data is open and can be accessed without the client being authenticated\";\n            return response()-\u003ejson(compact('data'),200);\n\n        }\n\n        public function closed() \n        {\n            $data = \"Only authorized users can see this\";\n            return response()-\u003ejson(compact('data'),200);\n        }\n}\n```\n\nEjecutar comando para crear middleware:\n```bash\nphp artisan make:middleware JwtMiddleware\n```\n\nImplementar JwtMiddleware de la siguiente manera:\n```\n\u003c?php\n\nnamespace App\\Http\\Middleware;\n\nuse Closure;\nuse JWTAuth;\nuse Exception;\nuse Tymon\\JWTAuth\\Http\\Middleware\\BaseMiddleware;\n\nclass JwtMiddleware extends BaseMiddleware\n{\n\n    /**\n        * Handle an incoming request.\n        *\n        * @param  \\Illuminate\\Http\\Request  $request\n        * @param  \\Closure  $next\n        * @return mixed\n        */\n    public function handle($request, Closure $next)\n    {\n        try {\n            $user = JWTAuth::parseToken()-\u003eauthenticate();\n        } catch (Exception $e) {\n            if ($e instanceof \\Tymon\\JWTAuth\\Exceptions\\TokenInvalidException){\n                return response()-\u003ejson(['status' =\u003e 'Token is Invalid']);\n            }else if ($e instanceof \\Tymon\\JWTAuth\\Exceptions\\TokenExpiredException){\n                return response()-\u003ejson(['status' =\u003e 'Token is Expired']);\n            }else{\n                return response()-\u003ejson(['status' =\u003e 'Authorization Token not found']);\n            }\n        }\n        return $next($request);\n    }\n}\n```\n\nAgregar JwtMiddleware al array de middlewares en el archivo app/http/Kernel.php:\n```php\n[...]\nprotected $routeMiddleware = [\n    [...]\n    'jwt.verify' =\u003e \\App\\Http\\Middleware\\JwtMiddleware::class,\n];\n[...]\n```\n\nAgregar las siguientes rutas al archivo routes/api.php:\n```php\n[...]\nRoute::post('register', 'UserController@register');\nRoute::post('login', 'UserController@authenticate');\nRoute::get('open', 'DataController@open');\n\nRoute::group(['middleware' =\u003e ['jwt.verify']], function() {\n    Route::get('user', 'UserController@getAuthenticatedUser');\n    Route::get('closed', 'DataController@closed');\n});\n```\n\n\u003c/details\u003e\n\n### cPanel commands\n\u003cdetails\u003e\n  \u003csummary\u003eMostrar\u003c/summary\u003e\u003cp\u003e\u003c/p\u003e\n\n```bash\n--------------------------------------------------------------\nPHP\n/opt/php71/bin/php\n/opt/php71/bin/php artisan key:generate\n/opt/php71/bin/php artisan migrate\n--------------------------------------------------------------\nARTISAN\n/opt/php71/bin/php artisan cache:clear\n/opt/php71/bin/php artisan route:clear\n/opt/php71/bin/php artisan view:clear\n/opt/php71/bin/php artisan config:clear\n--------------------------------------------------------------\nCOMPOSER\n/opt/cpanel/composer/bin/composer install\n/opt/cpanel/composer/bin/composer update\n/opt/cpanel/composer/bin/composer require \u003cpackage\u003e\n/opt/cpanel/composer/bin/composer remove \u003cpackage\u003e\n/opt/cpanel/composer/bin/composer dump-autoload\n--------------------------------------------------------------\n/opt/php71/bin/php /opt/cpanel/composer/bin/composer install\n/opt/php71/bin/php /opt/cpanel/composer/bin/composer update\n--------------------------------------------------------------\n```\n\n\u003c/details\u003e\n\n### Fixes\n\u003cdetails\u003e\n  \u003csummary\u003eMostrar\u003c/summary\u003e\u003cp\u003e\u003c/p\u003e\n\n#### Syntax error or access violation: 1071 Specified key was too long\n\nEstablecer el tamaño default en el archivo `AppServiceProvider.php`\n\n```php\nuse Illuminate\\Support\\Facades\\Schema;\n\npublic function boot()\n{\n    Schema::defaultStringLength(191);\n}\n```\n\n\u003c/details\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanayarojo%2Flaravel-jwt","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fanayarojo%2Flaravel-jwt","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanayarojo%2Flaravel-jwt/lists"}