From 843103c58c47d4f81ae927efeca6cbd086dd7c93 Mon Sep 17 00:00:00 2001 From: jack Date: Sun, 22 Apr 2018 15:58:23 +0800 Subject: [PATCH] updated jwt --- app/Http/Controllers/AuthController.php | 111 +++++++ app/User.php | 25 +- composer.json | 3 +- composer.lock | 416 ++++++++++++++++++++---- config/app.php | 4 +- data/mysql/default/users.ibd | Bin 114688 -> 114688 bytes data/mysql/ib_logfile0 | Bin 50331648 -> 50331648 bytes data/mysql/ibdata1 | Bin 12582912 -> 12582912 bytes data/mysql/mysql/innodb_index_stats.ibd | Bin 98304 -> 98304 bytes data/mysql/mysql/innodb_table_stats.ibd | Bin 98304 -> 98304 bytes routes/api.php | 13 +- routes/web.php | 3 + 12 files changed, 513 insertions(+), 62 deletions(-) create mode 100644 app/Http/Controllers/AuthController.php diff --git a/app/Http/Controllers/AuthController.php b/app/Http/Controllers/AuthController.php new file mode 100644 index 0000000..30f44a0 --- /dev/null +++ b/app/Http/Controllers/AuthController.php @@ -0,0 +1,111 @@ +only('name', 'email', 'password'); + $rules = [ + 'name' => 'required|min:4', + 'email' => 'required|email|max:255|unique:users', + 'password' => 'required|min:6', + ]; + $validator = Validator::make($credentials, $rules); + if($validator->fails()) { + return response()->json(['success'=> false, 'error'=> $validator->messages()]); + } + $name = $request->name; + $email = $request->email; + $password = $request->password; + User::create(['name' => $name, 'email' => $email, 'password' => Hash::make($password)]); + return $this->login($request); + } + + /** + * API Login, on success return JWT Auth token + * + * @param Request $request + * @return \Illuminate\Http\JsonResponse + */ + public function login(Request $request) + { + $credentials = $request->only('email', 'password'); + $rules = [ + 'email' => 'required|email', + 'password' => 'required', + ]; + $validator = Validator::make($credentials, $rules); + if($validator->fails()) { + return response()->json(['success'=> false, 'error'=> $validator->messages()]); + } + try { + // attempt to verify the credentials and create a token for the user + if (!$token = JWTAuth::attempt($credentials)) { + return response()->json(['success' => false, 'error' => 'We cant find an account with this credentials.'], 401); + } + } catch (JWTException $e) { + // something went wrong whilst attempting to encode the token + return response()->json(['success' => false, 'error' => 'Failed to login, please try again.'], 500); + } + // all good so return the token + return response()->json(['success' => true, 'data'=> [ 'token' => $token ]]); + } + + /** + * Log out + * Invalidate the token, so user cannot use it anymore + * They have to relogin to get a new token + * + * @param Request $request + */ + public function logout(Request $request) { + $this->validate($request, ['token' => 'required']); + try { + JWTAuth::invalidate($request->input('token')); + return response()->json(['success' => true, 'message'=> "You have successfully logged out."]); + } catch (JWTException $e) { + // something went wrong whilst attempting to encode the token + return response()->json(['success' => false, 'error' => 'Failed to logout, please try again.'], 500); + } + } + + /** + * API Recover Password + * + * @param Request $request + * @return \Illuminate\Http\JsonResponse + */ + public function recover(Request $request) + { + $user = User::where('email', $request->email)->first(); + if (!$user) { + $error_message = "Your email address was not found."; + return response()->json(['success' => false, 'error' => ['email'=> $error_message]], 401); + } + try { + Password::sendResetLink($request->only('email'), function (Message $message) { + $message->subject('Your Password Reset Link'); + }); + } catch (\Exception $e) { + //Return with error + $error_message = $e->getMessage(); + return response()->json(['success' => false, 'error' => $error_message], 401); + } + return response()->json([ + 'success' => true, 'data'=> ['message'=> 'A reset email has been sent! Please check your email.'] + ]); + } + +} \ No newline at end of file diff --git a/app/User.php b/app/User.php index bfd96a6..602279d 100644 --- a/app/User.php +++ b/app/User.php @@ -2,10 +2,11 @@ namespace App; +use Tymon\JWTAuth\Contracts\JWTSubject; use Illuminate\Notifications\Notifiable; use Illuminate\Foundation\Auth\User as Authenticatable; -class User extends Authenticatable +class User extends Authenticatable implements JWTSubject { use Notifiable; @@ -15,7 +16,7 @@ class User extends Authenticatable * @var array */ protected $fillable = [ - 'name', 'email', 'password', + 'name', 'email', 'password', ]; /** @@ -26,4 +27,24 @@ class User extends Authenticatable protected $hidden = [ 'password', 'remember_token', ]; + + /** + * Get the identifier that will be stored in the subject claim of the JWT. + * + * @return mixed + */ + public function getJWTIdentifier() + { + return $this->getKey(); + } + /** + * Return a key value array, containing any custom claims to be added to the JWT. + * + * @return array + */ + public function getJWTCustomClaims() + { + return []; + } + } diff --git a/composer.json b/composer.json index 65bf8b4..9b16a71 100644 --- a/composer.json +++ b/composer.json @@ -8,7 +8,8 @@ "php": "^7.1.3", "fideloper/proxy": "^4.0", "laravel/framework": "5.6.*", - "laravel/tinker": "^1.0" + "laravel/tinker": "^1.0", + "tymon/jwt-auth": "dev-develop" }, "require-dev": { "filp/whoops": "^2.0", diff --git a/composer.lock b/composer.lock index ef8e997..9b8412c 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "content-hash": "d5bca48e56bbf3a25645858fcab9c285", + "content-hash": "f2d9e6ec1c09918f1f3130aa31e04472", "packages": [ { "name": "dnoegel/php-xdg-base-dir", @@ -455,16 +455,16 @@ }, { "name": "laravel/framework", - "version": "v5.6.16", + "version": "v5.6.17", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "fcdbc791bc3e113ada38ab0a1147141fb9ec2b16" + "reference": "0f787c763ae8fb9fae0c8c809830ba4fa81e2d9d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/fcdbc791bc3e113ada38ab0a1147141fb9ec2b16", - "reference": "fcdbc791bc3e113ada38ab0a1147141fb9ec2b16", + "url": "https://api.github.com/repos/laravel/framework/zipball/0f787c763ae8fb9fae0c8c809830ba4fa81e2d9d", + "reference": "0f787c763ae8fb9fae0c8c809830ba4fa81e2d9d", "shasum": "" }, "require": { @@ -475,7 +475,7 @@ "ext-openssl": "*", "league/flysystem": "^1.0.8", "monolog/monolog": "~1.12", - "nesbot/carbon": "^1.24.1", + "nesbot/carbon": "1.25.*", "php": "^7.1.3", "psr/container": "~1.0", "psr/simple-cache": "^1.0", @@ -590,20 +590,20 @@ "framework", "laravel" ], - "time": "2018-04-09T16:07:04+00:00" + "time": "2018-04-17T12:51:04+00:00" }, { "name": "laravel/tinker", - "version": "v1.0.5", + "version": "v1.0.6", "source": { "type": "git", "url": "https://github.com/laravel/tinker.git", - "reference": "94f6daf2131508cebd11cd6f8632ba586d7ecc41" + "reference": "b22fe905fcefdffae76b011e27c7ac09e07e052b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/tinker/zipball/94f6daf2131508cebd11cd6f8632ba586d7ecc41", - "reference": "94f6daf2131508cebd11cd6f8632ba586d7ecc41", + "url": "https://api.github.com/repos/laravel/tinker/zipball/b22fe905fcefdffae76b011e27c7ac09e07e052b", + "reference": "b22fe905fcefdffae76b011e27c7ac09e07e052b", "shasum": "" }, "require": { @@ -611,7 +611,7 @@ "illuminate/contracts": "~5.1", "illuminate/support": "~5.1", "php": ">=5.5.9", - "psy/psysh": "0.7.*|0.8.*", + "psy/psysh": "0.7.*|0.8.*|0.9.*", "symfony/var-dumper": "~3.0|~4.0" }, "require-dev": { @@ -653,7 +653,65 @@ "laravel", "psysh" ], - "time": "2018-03-06T17:34:36+00:00" + "time": "2018-04-16T12:10:37+00:00" + }, + { + "name": "lcobucci/jwt", + "version": "3.2.2", + "source": { + "type": "git", + "url": "https://github.com/lcobucci/jwt.git", + "reference": "0b5930be73582369e10c4d4bb7a12bac927a203c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/lcobucci/jwt/zipball/0b5930be73582369e10c4d4bb7a12bac927a203c", + "reference": "0b5930be73582369e10c4d4bb7a12bac927a203c", + "shasum": "" + }, + "require": { + "ext-openssl": "*", + "php": ">=5.5" + }, + "require-dev": { + "mdanter/ecc": "~0.3.1", + "mikey179/vfsstream": "~1.5", + "phpmd/phpmd": "~2.2", + "phpunit/php-invoker": "~1.1", + "phpunit/phpunit": "~4.5", + "squizlabs/php_codesniffer": "~2.3" + }, + "suggest": { + "mdanter/ecc": "Required to use Elliptic Curves based algorithms." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1-dev" + } + }, + "autoload": { + "psr-4": { + "Lcobucci\\JWT\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Luís Otávio Cobucci Oblonczyk", + "email": "lcobucci@gmail.com", + "role": "developer" + } + ], + "description": "A simple library to work with JSON Web Token and JSON Web Signature", + "keywords": [ + "JWS", + "jwt" + ], + "time": "2017-09-01T08:23:26+00:00" }, { "name": "league/flysystem", @@ -817,6 +875,69 @@ ], "time": "2017-06-19T01:22:40+00:00" }, + { + "name": "namshi/jose", + "version": "7.2.3", + "source": { + "type": "git", + "url": "https://github.com/namshi/jose.git", + "reference": "89a24d7eb3040e285dd5925fcad992378b82bcff" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/namshi/jose/zipball/89a24d7eb3040e285dd5925fcad992378b82bcff", + "reference": "89a24d7eb3040e285dd5925fcad992378b82bcff", + "shasum": "" + }, + "require": { + "ext-date": "*", + "ext-hash": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-spl": "*", + "php": ">=5.5", + "symfony/polyfill-php56": "^1.0" + }, + "require-dev": { + "phpseclib/phpseclib": "^2.0", + "phpunit/phpunit": "^4.5|^5.0", + "satooshi/php-coveralls": "^1.0" + }, + "suggest": { + "ext-openssl": "Allows to use OpenSSL as crypto engine.", + "phpseclib/phpseclib": "Allows to use Phpseclib as crypto engine, use version ^2.0." + }, + "type": "library", + "autoload": { + "psr-4": { + "Namshi\\JOSE\\": "src/Namshi/JOSE/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Alessandro Nadalin", + "email": "alessandro.nadalin@gmail.com" + }, + { + "name": "Alessandro Cinelli (cirpo)", + "email": "alessandro.cinelli@gmail.com" + } + ], + "description": "JSON Object Signing and Encryption library for PHP.", + "keywords": [ + "JSON Web Signature", + "JSON Web Token", + "JWS", + "json", + "jwt", + "token" + ], + "time": "2016-12-05T07:27:31+00:00" + }, { "name": "nesbot/carbon", "version": "1.25.0", @@ -872,24 +993,24 @@ }, { "name": "nikic/php-parser", - "version": "v3.1.5", + "version": "v4.0.1", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "bb87e28e7d7b8d9a7fda231d37457c9210faf6ce" + "reference": "e4a54fa90a5cd8e8dd3fb4099942681731c5cdd3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/bb87e28e7d7b8d9a7fda231d37457c9210faf6ce", - "reference": "bb87e28e7d7b8d9a7fda231d37457c9210faf6ce", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/e4a54fa90a5cd8e8dd3fb4099942681731c5cdd3", + "reference": "e4a54fa90a5cd8e8dd3fb4099942681731c5cdd3", "shasum": "" }, "require": { "ext-tokenizer": "*", - "php": ">=5.5" + "php": ">=7.0" }, "require-dev": { - "phpunit/phpunit": "~4.0|~5.0" + "phpunit/phpunit": "^6.5 || ^7.0" }, "bin": [ "bin/php-parse" @@ -897,7 +1018,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -919,7 +1040,7 @@ "parser", "php" ], - "time": "2018-02-28T20:30:58+00:00" + "time": "2018-03-25T17:35:16+00:00" }, { "name": "paragonie/random_compat", @@ -1115,29 +1236,29 @@ }, { "name": "psy/psysh", - "version": "v0.8.18", + "version": "v0.9.3", "source": { "type": "git", "url": "https://github.com/bobthecow/psysh.git", - "reference": "5357b1cffc8fb375d6a9e3c86d5c82dd38a40834" + "reference": "79c280013cf0b30fa23f3ba8bd3649218075adf4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/5357b1cffc8fb375d6a9e3c86d5c82dd38a40834", - "reference": "5357b1cffc8fb375d6a9e3c86d5c82dd38a40834", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/79c280013cf0b30fa23f3ba8bd3649218075adf4", + "reference": "79c280013cf0b30fa23f3ba8bd3649218075adf4", "shasum": "" }, "require": { "dnoegel/php-xdg-base-dir": "0.1", "jakub-onderka/php-console-highlighter": "0.3.*", - "nikic/php-parser": "~1.3|~2.0|~3.0", - "php": ">=5.3.9", + "nikic/php-parser": "~1.3|~2.0|~3.0|~4.0", + "php": ">=5.4.0", "symfony/console": "~2.3.10|^2.4.2|~3.0|~4.0", "symfony/var-dumper": "~2.7|~3.0|~4.0" }, "require-dev": { - "hoa/console": "~3.16|~1.14", - "phpunit/phpunit": "^4.8.35|^5.4.3", + "hoa/console": "~2.15|~3.16", + "phpunit/phpunit": "~4.8.35|~5.0|~6.0|~7.0", "symfony/finder": "~2.1|~3.0|~4.0" }, "suggest": { @@ -1153,15 +1274,15 @@ "type": "library", "extra": { "branch-alias": { - "dev-develop": "0.8.x-dev" + "dev-develop": "0.9.x-dev" } }, "autoload": { "files": [ - "src/Psy/functions.php" + "src/functions.php" ], "psr-4": { - "Psy\\": "src/Psy/" + "Psy\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1183,7 +1304,7 @@ "interactive", "shell" ], - "time": "2018-04-02T05:41:44+00:00" + "time": "2018-04-18T12:32:50+00:00" }, { "name": "ramsey/uuid", @@ -1807,6 +1928,62 @@ ], "time": "2018-01-30T19:27:44+00:00" }, + { + "name": "symfony/polyfill-php56", + "version": "v1.7.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php56.git", + "reference": "ebc999ce5f14204c5150b9bd15f8f04e621409d8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/ebc999ce5f14204c5150b9bd15f8f04e621409d8", + "reference": "ebc999ce5f14204c5150b9bd15f8f04e621409d8", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "symfony/polyfill-util": "~1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.7-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php56\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 5.6+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2018-01-30T19:27:44+00:00" + }, { "name": "symfony/polyfill-php72", "version": "v1.7.0", @@ -1862,6 +2039,58 @@ ], "time": "2018-01-31T17:43:24+00:00" }, + { + "name": "symfony/polyfill-util", + "version": "v1.7.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-util.git", + "reference": "e17c808ec4228026d4f5a8832afa19be85979563" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-util/zipball/e17c808ec4228026d4f5a8832afa19be85979563", + "reference": "e17c808ec4228026d4f5a8832afa19be85979563", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.7-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Util\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony utilities for portability of PHP codes", + "homepage": "https://symfony.com", + "keywords": [ + "compat", + "compatibility", + "polyfill", + "shim" + ], + "time": "2018-01-31T18:08:44+00:00" + }, { "name": "symfony/process", "version": "v4.0.8", @@ -2173,6 +2402,81 @@ "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", "time": "2017-11-27T11:13:29+00:00" }, + { + "name": "tymon/jwt-auth", + "version": "dev-develop", + "source": { + "type": "git", + "url": "https://github.com/tymondesigns/jwt-auth.git", + "reference": "2b79229235d83523a05069ccb9c97cd5ec0b8123" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/tymondesigns/jwt-auth/zipball/2b79229235d83523a05069ccb9c97cd5ec0b8123", + "reference": "2b79229235d83523a05069ccb9c97cd5ec0b8123", + "shasum": "" + }, + "require": { + "illuminate/auth": "5.1.* || 5.2.* || 5.3.* || 5.4.* || 5.5.* || 5.6.*", + "illuminate/contracts": "5.1.* || 5.2.* || 5.3.* || 5.4.* || 5.5.* || 5.6.*", + "illuminate/http": "5.1.* || 5.2.* || 5.3.* || 5.4.* || 5.5.* || 5.6.*", + "illuminate/support": "5.1.* || 5.2.* || 5.3.* || 5.4.* || 5.5.* || 5.6.*", + "lcobucci/jwt": "^3.2", + "namshi/jose": "^7.0", + "nesbot/carbon": "^1.0", + "php": "^5.5.9 || ^7.0" + }, + "require-dev": { + "cartalyst/sentinel": "2.0.*", + "illuminate/console": "5.1.* || 5.2.* || 5.3.* || 5.4.* || 5.5.* || 5.6.*", + "illuminate/database": "5.1.* || 5.2.* || 5.3.* || 5.4.* || 5.5.* || 5.6.*", + "illuminate/routing": "5.1.* || 5.2.* || 5.3.* || 5.4.* || 5.5.* || 5.6.*", + "mockery/mockery": ">=0.9.9", + "phpunit/phpunit": "~4.8 || ~6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-develop": "1.0-dev" + }, + "laravel": { + "aliases": { + "JWTAuth": "Tymon\\JWTAuth\\Facades\\JWTAuth", + "JWTFactory": "Tymon\\JWTAuth\\Facades\\JWTFactory" + }, + "providers": [ + "Tymon\\JWTAuth\\Providers\\LaravelServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Tymon\\JWTAuth\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Sean Tymon", + "email": "tymon148@gmail.com", + "homepage": "https://tymon.xyz", + "role": "Developer" + } + ], + "description": "JSON Web Token Authentication for Laravel and Lumen", + "homepage": "https://github.com/tymondesigns/jwt-auth", + "keywords": [ + "Authentication", + "JSON Web Token", + "auth", + "jwt", + "laravel" + ], + "time": "2018-03-10T22:14:03+00:00" + }, { "name": "vlucas/phpdotenv", "version": "v2.4.0", @@ -2866,23 +3170,23 @@ }, { "name": "phpspec/prophecy", - "version": "1.7.5", + "version": "1.7.6", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "dfd6be44111a7c41c2e884a336cc4f461b3b2401" + "reference": "33a7e3c4fda54e912ff6338c48823bd5c0f0b712" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/dfd6be44111a7c41c2e884a336cc4f461b3b2401", - "reference": "dfd6be44111a7c41c2e884a336cc4f461b3b2401", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/33a7e3c4fda54e912ff6338c48823bd5c0f0b712", + "reference": "33a7e3c4fda54e912ff6338c48823bd5c0f0b712", "shasum": "" }, "require": { "doctrine/instantiator": "^1.0.2", "php": "^5.3|^7.0", "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0", - "sebastian/comparator": "^1.1|^2.0", + "sebastian/comparator": "^1.1|^2.0|^3.0", "sebastian/recursion-context": "^1.0|^2.0|^3.0" }, "require-dev": { @@ -2925,7 +3229,7 @@ "spy", "stub" ], - "time": "2018-02-19T10:16:54+00:00" + "time": "2018-04-18T13:57:24+00:00" }, { "name": "phpunit/php-code-coverage", @@ -3178,16 +3482,16 @@ }, { "name": "phpunit/phpunit", - "version": "7.1.3", + "version": "7.1.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "a7834993ddbf4b0ed2c3b2dc1f3b1d093ef910a9" + "reference": "6d51299e307dc510149e0b7cd1931dd11770e1cb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a7834993ddbf4b0ed2c3b2dc1f3b1d093ef910a9", - "reference": "a7834993ddbf4b0ed2c3b2dc1f3b1d093ef910a9", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/6d51299e307dc510149e0b7cd1931dd11770e1cb", + "reference": "6d51299e307dc510149e0b7cd1931dd11770e1cb", "shasum": "" }, "require": { @@ -3206,7 +3510,7 @@ "phpunit/php-text-template": "^1.2.1", "phpunit/php-timer": "^2.0", "phpunit/phpunit-mock-objects": "^6.1.1", - "sebastian/comparator": "^2.1", + "sebastian/comparator": "^2.1 || ^3.0", "sebastian/diff": "^3.0", "sebastian/environment": "^3.1", "sebastian/exporter": "^3.1", @@ -3254,7 +3558,7 @@ "testing", "xunit" ], - "time": "2018-04-13T02:28:50+00:00" + "time": "2018-04-18T13:41:53+00:00" }, { "name": "phpunit/phpunit-mock-objects", @@ -3359,30 +3663,30 @@ }, { "name": "sebastian/comparator", - "version": "2.1.3", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "34369daee48eafb2651bea869b4b15d75ccc35f9" + "reference": "ed5fd2281113729f1ebcc64d101ad66028aeb3d5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/34369daee48eafb2651bea869b4b15d75ccc35f9", - "reference": "34369daee48eafb2651bea869b4b15d75ccc35f9", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/ed5fd2281113729f1ebcc64d101ad66028aeb3d5", + "reference": "ed5fd2281113729f1ebcc64d101ad66028aeb3d5", "shasum": "" }, "require": { - "php": "^7.0", - "sebastian/diff": "^2.0 || ^3.0", + "php": "^7.1", + "sebastian/diff": "^3.0", "sebastian/exporter": "^3.1" }, "require-dev": { - "phpunit/phpunit": "^6.4" + "phpunit/phpunit": "^7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1.x-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -3419,7 +3723,7 @@ "compare", "equality" ], - "time": "2018-02-01T13:46:46+00:00" + "time": "2018-04-18T13:33:00+00:00" }, { "name": "sebastian/diff", @@ -3968,7 +4272,9 @@ ], "aliases": [], "minimum-stability": "dev", - "stability-flags": [], + "stability-flags": { + "tymon/jwt-auth": 20 + }, "prefer-stable": true, "prefer-lowest": false, "platform": { diff --git a/config/app.php b/config/app.php index b16e7f7..3dc5bca 100644 --- a/config/app.php +++ b/config/app.php @@ -146,10 +146,10 @@ return [ Illuminate\Translation\TranslationServiceProvider::class, Illuminate\Validation\ValidationServiceProvider::class, Illuminate\View\ViewServiceProvider::class, - /* * Package Service Providers... */ + Tymon\JWTAuth\Providers\LaravelServiceProvider::class, /* * Application Service Providers... @@ -208,6 +208,8 @@ return [ 'URL' => Illuminate\Support\Facades\URL::class, 'Validator' => Illuminate\Support\Facades\Validator::class, 'View' => Illuminate\Support\Facades\View::class, + 'JWTAuth' => Tymon\JWTAuth\Facades\JWTAuth::class, + 'JWTFactory' => Tymon\JWTAuth\Facades\JWTFactory::class, ], diff --git a/data/mysql/default/users.ibd b/data/mysql/default/users.ibd index 740b5ce828642f8b1a3c49bd90c7ffd3ec3c1a29..821a17a63f7baab3a276c96aeb3f7e4e7b062a1d 100644 GIT binary patch delta 506 zcmZo@U~gz(UvR+UNzoZL1_lP^|4;yAGcZWba&p}dWv0ie1u8L8milKo@k%y0)xuL6Xa(H^CS)Q|3fQx~vQ>vMxS43gHk6U)Qcaecv zZkVZSa)@a~R&J`ZYk)~rZqyz7sCp1#!vnHS;(rs+A||kHd~HD6EMc}KqFa|&mT2f< zmKNb$rXS$po#yUXXr+%-Sy7T56p~RMRFapTYLr?OlxUi2S{hXewCObn zgDil9jpwG?c^5DwbEjIUfx@gmed;QpBnw(tmY|0v!(wPyP6mb#Ff1Vk3i3^LU{rE6 zz#68&;1&4)2`TJ=dKh^?{(hZUjPN2*lxgEZbNh)Gq`83(YkNI659qKGkkG~p8bG{| F5dh3tka++A delta 223 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 b9j?O-_yhigzu<592X4YG`zGD~?Bo6eqbQOT delta 3688 zcmZA3Wl&XH9ES135oM!**c?o-JFvUE#qL&YK`cZ>-4=>iU?O%42H4$-En;G0cNh14 z=H5?t%{;%^vuEvD>(hUBP*9LtkcxJ&+FUFwTZF&G7U*vYvRG37TTvc%Msnf6*fWui z);PNmTawl0{O?}(0E^8M@c+G@_FdxrlDxgbJQ9Nq)37rQt7)V%4SUl_Z5nAz!@)H4 z-qAGDnnpU)a54>N({M43^rqoz8W~I@qiJL^jm)Nz#Wb>-MmE!Mi#2Ta{)WZhl1WFq zggXV=d}2IIJNvZ32?eI2%Bk|If~u%0smiK~s;a7~>Z*pSscNa(s*b9w>Z$swfoiB4sm7{_ zYO0#4=BkBisamPls*UniZB;wfUUg6%RVUS1bx~baH`QJBP(4*I)m!yZeN{izUky+L zm5&;v2CE@zs2Zk*s}X9X@>PCnl=4@j)fhEajZ@=QfSRBJ)kGDfCaGXGSxr$>m8qtw z>1u|Wsb;AVHCxS5p=z!QQ}fh(wLmRYi&VIZP>atBdNAx~#6KtLmD%u5PFVbyFp(Tk5vDqwcDE>b^=+57a~T zNIh0h)Km3LC9CJ^g?g!8sn_a_daK^4_v(ZCs6MIB>WliSzNzo(hx)00so(04`m0iA z*@f7JDzHK-u!q!;1{}ZuM@S3lzzLke1=52nWPps22{J<#$O_rO4Q${J*&zqygj|pt z@_+|;LSD!R`Jn(5ghEglia=2)2F0NSl!Q`H8p?ndl!bCo9x6aZs05Xv3RHz^P#tPO zO{fL6p$^oAdQcx4KtpH*jiCuNg=WwkT0l!^1+AeCctcxg2koH)bc9aO8M;7M=my=P z2lRwq&>Q+dU+4$@VE_yS9~cCKVF(O`VK5vhFFM$J+K${!G1UZ2jLJLh9htk zj=^y_0Vm-UoQ5-S7S6$WxB&5R5iY@HxB^$<8eE4PkN`I!5pKb4xC3|L9^8i{cmNOK z5j=(`@D!dwGCYSD@Dg6ZYj^{1;T^n(5AYE_!DsjaU*Q{khad10e!*|}1AigKPUFw2 z2RpDrDzJytkOmyU07pm*>A(q`!3ENTD`bF-kO?wF7RUYnqC6ZwSLg=ap$GJY zUeFu*Kwszw{b2wM1Rod#gJB2^g<&upM!-n$1wR-C{xBNGz*rau;~@YhKp;$nAeaQf zFd3%6R4`#0OotgT6J|jO%!WA-3UeV0=D~be01IIeghK=@h9$5RmcepZ0gw%02^TwY=$kc6}G{4h=v&00XtzA?1or~gFUbp_Q8HQ00-d^9EKxs6pq1h zH~}Z&6r6@La2C$NdAI=aa1k!SWw-)Y;Tl|r8;}4uArWrDZMXw>;U3(FBzOQ1;SoHB zC-4-WK{7mt7w{5Z!E1N}Z{Z!hhY#=(KEY@B0$<@9e1{+K6Mn&O_yd2fhc*7JDZX*8 I`Ui9R2hqFl3IG5A diff --git a/data/mysql/ibdata1 b/data/mysql/ibdata1 index aa2e262dee8f6e5dcfc1be3d6adb176ee096c58f..21c7953a609ee264c460348b79a6e29abdcb1ff2 100644 GIT binary patch delta 4200 zcmeHJYj9L&8UD`MvzzN~c9RX+AT|LarIbr98oZELY&IZd$DN=PfM^^(G-TIGp$v@^;N^pE4vvCi1312fL(=s5O=>v#5&Y@*}T zwmeee5y@4kj%I1KBWQ1mtC@|Uj*A?)&+8^uo>B4h3~_2h}J(Uo8N zGmq83@Su=BFccUn3>yp$h8>0jMh1*b7+El~VdP92xq98}uZ`W33{@$X_;2y~cZ4I| z5{t$Dm3&u)P#SDw(K_bRub*F?`zImYFCA=qTRN;y2Z`c|lK)BLS2{1(IqA=wntXP^ z@`mn&?wZu|=v&tveN!rJm`^x<()8)YtIS4v7rQ;K*^i3i7Q#GC@5P)YIig6DA5_I1 zT{7dnu}S}}clkL{Jbv^2!!~vP=z8?vraEu zHF8H+Pe)f|Fd}RsM~MExBYk1{R-dCOLbydly2}S4JXw#(r&`6`6N-dG{fBgUt!?j( zlvNIwRg{7+iE%vY(BOwxNS$r z)`sD#p?$lDY9hOK_8lJ{8tC4$_x|I126{TfmEpcUq3Uq;V9T&nx@BFK!0ecEsW&&C zb*nG#I3n6}!gVWTL>td^K6OcYXbU1burQ+HLNcOfWsqb<6RaMWsq00{8p{7`WMz=u zvA?E8P=b_PYxTE6{c{VIR&`2I|FLn(tsYdi%E{r@Gd*&015f_Fs6s*-5@N}_wX>7* zNsFpgXs=ic5F&9Gs_nR0uLtY0ZO1L2_-;R?2V?3=PhJA#aSKJ0&MNBT zBU;!c;{JK=Ymz0P1TqeVJ3@np2ke9W;l6&6FH#02VXWyrJOPQw2)5g>(|0EGF$E`{o7BkUbYUYZ`VWR61d<1oIhjwjDl&WCr=g? zDH*nMZ$4)f6lE%wsWkSwIcoPVGTSuO9xWOz_`@ds-Tdi2lJU$3s~%fY)#LZqb~Q?E ze`;0nU#og7NR<-H$e5ohC1BQbcU`s;urP|ODCQ~dzP8fiNpN}cg`&vRrj5Bw`4gGS zR@+?i2+NUYE>?og1u^xyQ*oC{gU9nmoHb_pX9|nWwKIj;9@P=g!Cd6c=apcI**jX2 zovXIlDqU)l>!cFg=T)!U#+p#%e7+nCniw5Q{2 zV-{|aIWkk|NP^F)!KGf?O>NrcNMQ5ddP2^(Nik2&_?GRo1*WuQ|p01;VVcR^6)?oKLGtwuaHAsEm($0Bq{}GY*r8RB8;>w)A zj6ht>?4I#Cx4n1H!{LxzbEq@iZ}&T@oLTAfxBF))UAq$*cwfX<9OJI+`I9|iF|W|Y z>h~09t-tF;*in^{;mk>&pQFlRxpRGTYX1+{xIFBCsVmKT=iU9*f9dE;uUh+l!C}7; zz3lT|R0=&FSvVBG+Ll)6RrA-1x6YaTWUGwVfo#RQ+T5&qm(SX7#_cl>Z<%ST-VG@# zZF(Nn+p4!I1+iaAQQd8}+q~;icE|WERrF^zZ*{%?=FmU8Me&8`htp0>QZ>MQumJRe zh2SEv2=sx);9~G2;1cko;2mHISPCu$mx0T{GVo*I3h+*FC3qLO3cMR!4Xy##g6qI? zumY?EtHAYOHCO}If_2~q@Z;b;U_H1I+yweT9c%y_!Oh?nFaS1zTfuGMC&2CC4sfS$ z!_Rx0WNvC@^5#bI*kG#jDOjv}vdsHfFg4rj$o9v4>vV}XT0T?o#-_~Q{LZyhNW{b^ z^$)R+%1rf9lSZL2v77a`tM=`xt=+ELvW$MUs23x>`;Agg_$KL@shhrlq{0d|7-gI(YQU^jRe zjDS60FL(qz3ig5h-~c!X9s`eqL*OuY0z3&m2tEX!0!Kgt90gB<4}*_@p9cYc0sJEP zCGb)3G4OHl%it5>8SpFMli*juv*6djr@(Wd2|f*uf#cwL@ay0+;IrU2z;A-jf!_iz zfD_djAA&yuUju&( K{$!F@^?w5#aJ~Zo delta 1081 zcmZXSS!|SL6ozM}K!@7eLE73WB8W<@w1R-r3bcQf)~!+$1$RYo!(9th0r@KO2<}@Q zcU*>Xso+wu;sOshUT92=H(vBYFHOAg%8(dh{EIX=@k>t5^1bKH*+K~8!ieOPQPXh4 z!KOqaF*cT?FI%@EQF_!JwJL|2qU85&>A&hH{ho+1gd`zFC?Sj?j3taCloHZ}@q{wM zF@;bb)vjs&X<5uLXO!iz&Srn#ddV$Z%nQ=RLx74x^Kk(##8zy>2;1>oJP#LP z2X^B5cmZCB7vaU&Rd8aIUmO*ziVC4Rwx*}OESY%d~+590rnCF}Yd zGqt%zW@hDjLU&=P?m%W`YOpl5enGloRmZN8Gs@S*tu4Vz@iJVBm*W+<4431Tcokla z*Wk5y9bS(&;ElKfZ^D(h3U9_+@K(GHZ^zYm2i}Qy;oW!--i!C){rCX(;2K#!Fe z#D{P_ZorNBFmA$tefS7&#z%1rf{)==+=h?i6Zj-Pg-_!%_$)q$&*KaDBKG4;n8TOx z6?_$6!`JZ*d=t0hTlhA z7?>tsI%vTQm0>ml$xP-ts59C5kTP8K6F4_U%YVcCIV%F{z`F!ik4pr&X~ mPCl#;6J?tPGiCGP!=^SIcPoBogPgYUpt=3V3mQPYkP!gjKt;#^ delta 182 zcmZo@U~6b#TW~-^?(5fL1_lP^|4;yAGcZWb5Z)|tU@4<0KUW6>1EV#gK-3-cFt8Mm zn0)D=1t(0#YVw04Vv}VKN=zaC(= X=Xj;3b_XQC@u0c=#tRxiypRz9=kp*V diff --git a/routes/api.php b/routes/api.php index c641ca5..2f258d6 100644 --- a/routes/api.php +++ b/routes/api.php @@ -13,6 +13,13 @@ use Illuminate\Http\Request; | */ -Route::middleware('auth:api')->get('/user', function (Request $request) { - return $request->user(); -}); +//Route::middleware('auth:api')->get('/user', function (Request $request) { +// return $request->user(); +//}); + +Route::post('register', 'AuthController@register'); +Route::post('login', 'AuthController@login'); +Route::post('recover', 'AuthController@recover'); +Route::group(['middleware' => ['jwt.auth']], function() { + Route::get('logout', 'AuthController@logout'); +}); \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index 810aa34..829e44a 100644 --- a/routes/web.php +++ b/routes/web.php @@ -14,3 +14,6 @@ Route::get('/', function () { return view('welcome'); }); + +Route::get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm')->name('password.request'); +Route::post('password/reset', 'Auth\ResetPasswordController@postReset')->name('password.reset');