From a2dad377587c63d06028ff0de1d1539689dadd0d Mon Sep 17 00:00:00 2001 From: Too Date: Wed, 20 Jun 2018 15:43:04 +0800 Subject: [PATCH 1/5] Check marking before create user --- app/Http/Controllers/Auth/RegisterController.php | 6 ++++++ database/factories/MarkingFactory.php | 10 ++++++++++ tests/Feature/RegisterTest.php | 16 +++++++++++++++- 3 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 database/factories/MarkingFactory.php diff --git a/app/Http/Controllers/Auth/RegisterController.php b/app/Http/Controllers/Auth/RegisterController.php index ecfc4151..9f560fc1 100644 --- a/app/Http/Controllers/Auth/RegisterController.php +++ b/app/Http/Controllers/Auth/RegisterController.php @@ -4,6 +4,7 @@ namespace App\Http\Controllers\Auth; use App\User; use App\Role; +use App\Marking; use Illuminate\Http\Request; use App\Http\Controllers\Controller; use Illuminate\Support\Facades\Validator; @@ -58,6 +59,11 @@ class RegisterController extends Controller */ protected function create(array $data) { + $marking = Marking::Where('email',$data['email'])->first(); + if($marking->marking = $data['marking']){ + redirect('/'); + } + $role = Role::where('name','=','member')->first(); $user = new User(); $user->name = $data['name']; diff --git a/database/factories/MarkingFactory.php b/database/factories/MarkingFactory.php new file mode 100644 index 00000000..989fcf07 --- /dev/null +++ b/database/factories/MarkingFactory.php @@ -0,0 +1,10 @@ +define(App\Marking::class, function (Faker $faker) { + return [ + 'email' => $faker->unique()->safeEmail, + 'marking' => str_random(10) + ]; +}); diff --git a/tests/Feature/RegisterTest.php b/tests/Feature/RegisterTest.php index 9861c9e0..5364b185 100644 --- a/tests/Feature/RegisterTest.php +++ b/tests/Feature/RegisterTest.php @@ -3,17 +3,31 @@ namespace Tests\Feature; use Tests\TestCase; +use App\Marking; +use Artisan; class RegisterTest extends TestCase { + protected $marking; + + public function setUp(){ + parent::setUp(); + Artisan::call('db:seed'); + + $this->marking = factory(Marking::class)->create(); + } + + /** @test */ public function can_register() { + $response = $this->postJson('/api/register', [ 'name' => 'Test User', - 'email' => 'test@test.app', + 'email' => $this->marking->email, 'password' => 'secret', 'password_confirmation' => 'secret', + 'marking' => $this->marking->marking ]) ->assertSuccessful() ->assertJsonStructure(['id', 'name', 'email']); From 3959c8c8b2f3fef5169b0507e100f92f4b180ad0 Mon Sep 17 00:00:00 2001 From: Too Date: Wed, 20 Jun 2018 15:56:08 +0800 Subject: [PATCH 2/5] pull from master --- app/Http/Controllers/Auth/RegisterController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Controllers/Auth/RegisterController.php b/app/Http/Controllers/Auth/RegisterController.php index 9f560fc1..fe195843 100644 --- a/app/Http/Controllers/Auth/RegisterController.php +++ b/app/Http/Controllers/Auth/RegisterController.php @@ -60,7 +60,7 @@ class RegisterController extends Controller protected function create(array $data) { $marking = Marking::Where('email',$data['email'])->first(); - if($marking->marking = $data['marking']){ + if($marking->marking == $data['marking']){ redirect('/'); } From e3c104f902832525f3509469a74c3687494b2bb9 Mon Sep 17 00:00:00 2001 From: Too Date: Wed, 20 Jun 2018 16:57:47 +0800 Subject: [PATCH 3/5] Done checking marking before register user --- app/Http/Controllers/Auth/RegisterController.php | 16 ++++++++++------ routes/api.php | 2 +- tests/Feature/RegisterTest.php | 4 +--- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/app/Http/Controllers/Auth/RegisterController.php b/app/Http/Controllers/Auth/RegisterController.php index fe195843..14ae0081 100644 --- a/app/Http/Controllers/Auth/RegisterController.php +++ b/app/Http/Controllers/Auth/RegisterController.php @@ -5,6 +5,7 @@ namespace App\Http\Controllers\Auth; use App\User; use App\Role; use App\Marking; +use Illuminate\Support\Facades\Auth; use Illuminate\Http\Request; use App\Http\Controllers\Controller; use Illuminate\Support\Facades\Validator; @@ -57,13 +58,16 @@ class RegisterController extends Controller * @param array $data * @return User */ - protected function create(array $data) + protected function create(Request $data) { $marking = Marking::Where('email',$data['email'])->first(); - if($marking->marking == $data['marking']){ - redirect('/'); + if(!$marking){ + return response()->json('Access Denied', 201); } - + if($marking->marking != $data['marking']){ + return response()->json('Wrong Marking', 201); + } + $role = Role::where('name','=','member')->first(); $user = new User(); $user->name = $data['name']; @@ -72,7 +76,7 @@ class RegisterController extends Controller $user->save(); $user->attachRole($role); - return $user; - + Auth::login($user); + return response()->json($user, 201); } } diff --git a/routes/api.php b/routes/api.php index af03826e..dfd4c1e0 100644 --- a/routes/api.php +++ b/routes/api.php @@ -51,7 +51,7 @@ Route::group(['middleware' => 'auth:api'], function () { Route::group(['middleware' => 'guest:api'], function () { Route::post('login', 'Auth\LoginController@login'); - Route::post('register', 'Auth\RegisterController@register'); + Route::post('register', 'Auth\RegisterController@create'); Route::post('password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail'); Route::post('password/reset', 'Auth\ResetPasswordController@reset'); diff --git a/tests/Feature/RegisterTest.php b/tests/Feature/RegisterTest.php index 5364b185..66080bd0 100644 --- a/tests/Feature/RegisterTest.php +++ b/tests/Feature/RegisterTest.php @@ -21,7 +21,6 @@ class RegisterTest extends TestCase /** @test */ public function can_register() { - $response = $this->postJson('/api/register', [ 'name' => 'Test User', 'email' => $this->marking->email, @@ -29,7 +28,6 @@ class RegisterTest extends TestCase 'password_confirmation' => 'secret', 'marking' => $this->marking->marking ]) - ->assertSuccessful() - ->assertJsonStructure(['id', 'name', 'email']); + ->assertSuccessful(); } } From e6d58004bc51e69c7f39473ba99a35bc9363b559 Mon Sep 17 00:00:00 2001 From: Too Date: Wed, 20 Jun 2018 17:04:50 +0800 Subject: [PATCH 4/5] fix error response code --- app/Http/Controllers/Auth/RegisterController.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/Auth/RegisterController.php b/app/Http/Controllers/Auth/RegisterController.php index 14ae0081..311c0301 100644 --- a/app/Http/Controllers/Auth/RegisterController.php +++ b/app/Http/Controllers/Auth/RegisterController.php @@ -62,10 +62,10 @@ class RegisterController extends Controller { $marking = Marking::Where('email',$data['email'])->first(); if(!$marking){ - return response()->json('Access Denied', 201); + return response()->json('Access Denied', 401); } if($marking->marking != $data['marking']){ - return response()->json('Wrong Marking', 201); + return response()->json('Wrong Marking', 400); } $role = Role::where('name','=','member')->first(); From 93d866f43256839acf7b0b60e9a92f0dd0b131e2 Mon Sep 17 00:00:00 2001 From: Too Date: Wed, 20 Jun 2018 17:30:53 +0800 Subject: [PATCH 5/5] Revert back changes during debug. Remove Auto login after register. --- app/Http/Controllers/Auth/RegisterController.php | 1 - tests/Feature/RegisterTest.php | 3 ++- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/Auth/RegisterController.php b/app/Http/Controllers/Auth/RegisterController.php index 311c0301..840ad692 100644 --- a/app/Http/Controllers/Auth/RegisterController.php +++ b/app/Http/Controllers/Auth/RegisterController.php @@ -76,7 +76,6 @@ class RegisterController extends Controller $user->save(); $user->attachRole($role); - Auth::login($user); return response()->json($user, 201); } } diff --git a/tests/Feature/RegisterTest.php b/tests/Feature/RegisterTest.php index 66080bd0..4f1c3023 100644 --- a/tests/Feature/RegisterTest.php +++ b/tests/Feature/RegisterTest.php @@ -28,6 +28,7 @@ class RegisterTest extends TestCase 'password_confirmation' => 'secret', 'marking' => $this->marking->marking ]) - ->assertSuccessful(); + ->assertSuccessful() + ->assertJsonStructure(['id', 'name', 'email']); } }