diff --git a/.env-example b/.env-example index f3080a1..a262324 100644 --- a/.env-example +++ b/.env-example @@ -1,17 +1,17 @@ APP_NAME=IZYIM APP_ENV=local -APP_KEY=base64:Fu2YulXExzm9HJ5LgVmZUmcbRkchHkc82q02MorN5GQ= +APP_KEY=base64:SqyQijGTJXCM9o50k2sKTkx+CWqxR+CE1xNS5b8INRQ= APP_DEBUG=true APP_URL=http://localhost LOG_CHANNEL=stack DB_CONNECTION=mysql -DB_HOST=127.0.0.1 +DB_HOST=mysql DB_PORT=3306 -DB_DATABASE=homestead -DB_USERNAME=homestead -DB_PASSWORD=secretx +DB_DATABASE=default +DB_USERNAME=default +DB_PASSWORD=secret BROADCAST_DRIVER=log CACHE_DRIVER=file @@ -37,3 +37,5 @@ PUSHER_APP_CLUSTER=mt1 MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}" MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" + +JWT_SECRET=Ra1xgapjSAFoRJIO5Rbg14gfMpNQDmrS \ No newline at end of file diff --git a/app/Http/Controllers/AuthController.php b/app/Http/Controllers/AuthController.php index 30f44a0..b355764 100644 --- a/app/Http/Controllers/AuthController.php +++ b/app/Http/Controllers/AuthController.php @@ -17,10 +17,10 @@ class AuthController extends Controller public function register(Request $request) { $credentials = $request->only('name', 'email', 'password'); + $rules = [ - 'name' => 'required|min:4', - 'email' => 'required|email|max:255|unique:users', - 'password' => 'required|min:6', + 'name' => 'required|max:255', + 'email' => 'required|email|max:255|unique:users' ]; $validator = Validator::make($credentials, $rules); if($validator->fails()) { @@ -29,8 +29,18 @@ class AuthController extends Controller $name = $request->name; $email = $request->email; $password = $request->password; - User::create(['name' => $name, 'email' => $email, 'password' => Hash::make($password)]); - return $this->login($request); + + $user = User::create(['name' => $name, 'email' => $email, 'password' => Hash::make($password)]); + $verification_code = str_random(30); //Generate verification code + DB::table('user_verifications')->insert(['user_id'=>$user->id,'token'=>$verification_code]); + $subject = "Please verify your email address."; + Mail::send('email.verify', ['name' => $name, 'verification_code' => $verification_code], + function($mail) use ($email, $name, $subject){ + $mail->from(getenv('FROM_EMAIL_ADDRESS'), "From User/Company Name Goes Here"); + $mail->to($email, $name); + $mail->subject($subject); + }); + return response()->json(['success'=> true, 'message'=> 'Thanks for signing up! Please check your email to complete your registration.']); } /** @@ -42,6 +52,7 @@ class AuthController extends Controller public function login(Request $request) { $credentials = $request->only('email', 'password'); + $rules = [ 'email' => 'required|email', 'password' => 'required', @@ -50,10 +61,13 @@ class AuthController extends Controller if($validator->fails()) { return response()->json(['success'=> false, 'error'=> $validator->messages()]); } + + $credentials['is_verified'] = 1; + 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); + if (! $token = JWTAuth::attempt($credentials)) { + return response()->json(['success' => false, 'error' => 'We cant find an account with this credentials. Please make sure you entered the right information and you have verified your email address.'], 401); } } catch (JWTException $e) { // something went wrong whilst attempting to encode the token @@ -72,6 +86,7 @@ class AuthController extends Controller */ 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."]); @@ -108,4 +123,31 @@ class AuthController extends Controller ]); } + /** + * API Verify User + * + * @param Request $request + * @return \Illuminate\Http\JsonResponse + */ + public function verifyUser($verification_code) + { + $check = DB::table('user_verifications')->where('token',$verification_code)->first(); + if(!is_null($check)){ + $user = User::find($check->user_id); + if($user->is_verified == 1){ + return response()->json([ + 'success'=> true, + 'message'=> 'Account already verified..' + ]); + } + $user->update(['is_verified' => 1]); + DB::table('user_verifications')->where('token',$verification_code)->delete(); + return response()->json([ + 'success'=> true, + 'message'=> 'You have successfully verified your email address.' + ]); + } + return response()->json(['success'=> false, 'error'=> "Verification code is invalid."]); + } + } \ No newline at end of file diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index 3439540..fc5184c 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -18,7 +18,7 @@ class Kernel extends HttpKernel \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class, \App\Http\Middleware\TrimStrings::class, \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, - \App\Http\Middleware\TrustProxies::class, + \App\Http\Middleware\TrustProxies::class ]; /** @@ -59,5 +59,7 @@ class Kernel extends HttpKernel 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class, 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, + 'jwt.auth' => 'Tymon\JWTAuth\Middleware\GetUserFromToken', + 'jwt.refresh' => 'Tymon\JWTAuth\Middleware\RefreshToken', ]; } diff --git a/data/mysql/default/migrations.ibd b/data/mysql/default/migrations.ibd index 97352e5..255cfbf 100644 Binary files a/data/mysql/default/migrations.ibd and b/data/mysql/default/migrations.ibd differ diff --git a/data/mysql/default/user_verifications.frm b/data/mysql/default/user_verifications.frm new file mode 100644 index 0000000..af307a1 Binary files /dev/null and b/data/mysql/default/user_verifications.frm differ diff --git a/data/mysql/default/user_verifications.ibd b/data/mysql/default/user_verifications.ibd new file mode 100644 index 0000000..55c62e6 Binary files /dev/null and b/data/mysql/default/user_verifications.ibd differ diff --git a/data/mysql/default/users.frm b/data/mysql/default/users.frm index cb57653..2cd2671 100644 Binary files a/data/mysql/default/users.frm and b/data/mysql/default/users.frm differ diff --git a/data/mysql/default/users.ibd b/data/mysql/default/users.ibd index 821a17a..75e4613 100644 Binary files a/data/mysql/default/users.ibd and b/data/mysql/default/users.ibd differ diff --git a/data/mysql/ib_logfile0 b/data/mysql/ib_logfile0 index fc28cc3..d7c183a 100644 Binary files a/data/mysql/ib_logfile0 and b/data/mysql/ib_logfile0 differ diff --git a/data/mysql/ibdata1 b/data/mysql/ibdata1 index 21c7953..998da9d 100644 Binary files a/data/mysql/ibdata1 and b/data/mysql/ibdata1 differ diff --git a/data/mysql/mysql/innodb_index_stats.ibd b/data/mysql/mysql/innodb_index_stats.ibd index 43c014c..3340649 100644 Binary files a/data/mysql/mysql/innodb_index_stats.ibd and b/data/mysql/mysql/innodb_index_stats.ibd differ diff --git a/data/mysql/mysql/innodb_table_stats.ibd b/data/mysql/mysql/innodb_table_stats.ibd index 7e7919f..cf6d773 100644 Binary files a/data/mysql/mysql/innodb_table_stats.ibd and b/data/mysql/mysql/innodb_table_stats.ibd differ diff --git a/database/migrations/2018_04_22_080323_create_user_verifications_table.php b/database/migrations/2018_04_22_080323_create_user_verifications_table.php new file mode 100644 index 0000000..216feb5 --- /dev/null +++ b/database/migrations/2018_04_22_080323_create_user_verifications_table.php @@ -0,0 +1,39 @@ +increments('id'); + $table->integer('user_id')->unsigned(); + $table->string('token'); + $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); + }); + Schema::table('users', function (Blueprint $table) { + $table->boolean('is_verified')->default(0); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists("user_verifications"); + Schema::table('users', function (Blueprint $table) { + $table->dropColumn('is_verified'); + }); + } +} diff --git a/resources/views/email/verify.blade.php b/resources/views/email/verify.blade.php new file mode 100644 index 0000000..aa20cf8 --- /dev/null +++ b/resources/views/email/verify.blade.php @@ -0,0 +1,22 @@ + + +
+ + + + +