From 1ea6c3263d1aa8e5458cee8ce53b7e4bf45877b9 Mon Sep 17 00:00:00 2001 From: Cendekia Pramana Putra Date: Thu, 18 Oct 2018 01:51:09 +0700 Subject: [PATCH 1/9] [new] Add Change Password Feature #14 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ✓ User must be logged in x User click the "Change Password" menu/link I'm using `Edit Profil Form`, since the change password form is already there ✓ User must fill in the old password, new password and confirm new password. ✓ System checks that old password is correct ✓ If old password correct, save new password ✓ Else, notify user that old password is incorrect. Bonus buat Mas @nafiels 😋 👌 ✓ New password cannot be same as user current password --- app/Http/Controllers/UsersController.php | 4 ++-- app/Http/Requests/Users/UpdateRequest.php | 11 ++++++++++- app/Providers/AppServiceProvider.php | 12 ++++++++++++ resources/lang/en/passwords.php | 3 ++- resources/lang/id/passwords.php | 2 ++ resources/views/users/edit.blade.php | 4 +++- 6 files changed, 31 insertions(+), 5 deletions(-) diff --git a/app/Http/Controllers/UsersController.php b/app/Http/Controllers/UsersController.php index 7ade80f..25ba0f5 100644 --- a/app/Http/Controllers/UsersController.php +++ b/app/Http/Controllers/UsersController.php @@ -142,8 +142,8 @@ class UsersController extends Controller $user->city = $request->get('city'); $user->email = $request->get('email'); - if ($request->get('password')) { - $user->password = bcrypt($request->get('password')); + if ($request->new_password) { + $user->password = bcrypt($request->new_password); } $user->save(); diff --git a/app/Http/Requests/Users/UpdateRequest.php b/app/Http/Requests/Users/UpdateRequest.php index 6120915..1e14a07 100644 --- a/app/Http/Requests/Users/UpdateRequest.php +++ b/app/Http/Requests/Users/UpdateRequest.php @@ -36,7 +36,16 @@ class UpdateRequest extends FormRequest 'address' => 'nullable|string|max:255', 'city' => 'nullable|string|max:255', 'email' => 'nullable|string|max:255', - 'password' => 'nullable|min:6|max:15', + 'password' => 'nullable|min:6|max:15|current_password', + 'new_password' => 'nullable|min:6|max:15|same_password|confirmed', + ]; + } + + public function messages() + { + return [ + 'password.current_password' => trans('passwords.old_password'), + 'new_password.same_password' => trans('passwords.same_password'), ]; } } diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 3a88480..d1e26f7 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -19,6 +19,18 @@ class AppServiceProvider extends ServiceProvider if($this->app->environment() === 'production') { $this->app['request']->server->set('HTTPS', true); } + + \Validator::extend('current_password', function ($attribute, $value, $parameters, $validator) { + $user = \Auth::user(); + + return $user && \Hash::check($value, $user->password); + }); + + \Validator::extend('same_password', function ($attribute, $value, $parameters, $validator) { + $user = \Auth::user(); + + return $user && !\Hash::check($value, $user->password); + }); } /** diff --git a/resources/lang/en/passwords.php b/resources/lang/en/passwords.php index ffa19ba..58420ea 100644 --- a/resources/lang/en/passwords.php +++ b/resources/lang/en/passwords.php @@ -18,5 +18,6 @@ return [ 'sent' => 'We have e-mailed your password reset link!', 'token' => 'This password reset token is invalid.', 'user' => "We can't find a user with that e-mail address.", - + "old_password" => "Your current password does not matches with the password you provided. Please try again.", + "same_password" => "New password cannot be same as your current password. Please choose a different password." ]; diff --git a/resources/lang/id/passwords.php b/resources/lang/id/passwords.php index 537a674..2682785 100644 --- a/resources/lang/id/passwords.php +++ b/resources/lang/id/passwords.php @@ -18,5 +18,7 @@ return [ "sent" => "Kami sudah mengirim email yang berisi tautan untuk mereset Password Anda!", "token" => "Token Reset Password tidak sah.", "user" => "Kami tidak dapat menemukan pengguna dengan email tersebut.", + "old_password" => "Password yang Anda masukan tidak sesuai dengan password yang tersimpan. Silahkan coba kembali.", + "same_password" => "Password baru Anda tidak boleh sama dengan password lama. Silahkan pilih password yang berbeda." ]; diff --git a/resources/views/users/edit.blade.php b/resources/views/users/edit.blade.php index 99109c9..6d35218 100644 --- a/resources/views/users/edit.blade.php +++ b/resources/views/users/edit.blade.php @@ -89,7 +89,9 @@

{{ trans('app.login_account') }}

{!! FormField::email('email', ['label' => trans('auth.email'), 'placeholder' => trans('app.example').' nama@mail.com']) !!} - {!! FormField::text('password', ['label' => trans('auth.password'), 'placeholder' => '******', 'value' => '']) !!} + {!! FormField::password('password', ['label' => trans('auth.old_password'), 'placeholder' => '******', 'value' => '']) !!} + {!! FormField::password('new_password', ['label' => trans('auth.new_password'), 'placeholder' => '******', 'value' => '']) !!} + {!! FormField::password ('new_password_confirmation', ['label' => trans('auth.new_password_confirmation'), 'placeholder' => '******', 'value' => '']) !!}
From f7de3f0650fb651f5dab479e34f5ba23d9080dec Mon Sep 17 00:00:00 2001 From: Cendekia Pramana Putra Date: Thu, 18 Oct 2018 02:03:12 +0700 Subject: [PATCH 2/9] fix travis ci --- tests/Feature/UsersProfileTest.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/Feature/UsersProfileTest.php b/tests/Feature/UsersProfileTest.php index 6d8e4e1..21e919f 100644 --- a/tests/Feature/UsersProfileTest.php +++ b/tests/Feature/UsersProfileTest.php @@ -66,6 +66,8 @@ class UsersProfileTest extends TestCase $this->submitForm(trans('app.update'), [ 'email' => 'user@mail.com', 'password' => 'Secr3t', + 'new_password' => 'Secr3t2', + 'new_password_confirmation' => 'Secr3t2', ]); $user = $user->fresh(); From a31cd378b68fd3dd7f92308bf79b399336a1a9a1 Mon Sep 17 00:00:00 2001 From: Cendekia Pramana Putra Date: Thu, 18 Oct 2018 10:49:30 +0700 Subject: [PATCH 3/9] roll back previous changes --- app/Http/Controllers/UsersController.php | 4 ++-- resources/views/users/edit.blade.php | 2 -- tests/Feature/UsersProfileTest.php | 2 -- 3 files changed, 2 insertions(+), 6 deletions(-) diff --git a/app/Http/Controllers/UsersController.php b/app/Http/Controllers/UsersController.php index 25ba0f5..7ade80f 100644 --- a/app/Http/Controllers/UsersController.php +++ b/app/Http/Controllers/UsersController.php @@ -142,8 +142,8 @@ class UsersController extends Controller $user->city = $request->get('city'); $user->email = $request->get('email'); - if ($request->new_password) { - $user->password = bcrypt($request->new_password); + if ($request->get('password')) { + $user->password = bcrypt($request->get('password')); } $user->save(); diff --git a/resources/views/users/edit.blade.php b/resources/views/users/edit.blade.php index 6d35218..479281a 100644 --- a/resources/views/users/edit.blade.php +++ b/resources/views/users/edit.blade.php @@ -90,8 +90,6 @@
{!! FormField::email('email', ['label' => trans('auth.email'), 'placeholder' => trans('app.example').' nama@mail.com']) !!} {!! FormField::password('password', ['label' => trans('auth.old_password'), 'placeholder' => '******', 'value' => '']) !!} - {!! FormField::password('new_password', ['label' => trans('auth.new_password'), 'placeholder' => '******', 'value' => '']) !!} - {!! FormField::password ('new_password_confirmation', ['label' => trans('auth.new_password_confirmation'), 'placeholder' => '******', 'value' => '']) !!}
diff --git a/tests/Feature/UsersProfileTest.php b/tests/Feature/UsersProfileTest.php index 21e919f..6d8e4e1 100644 --- a/tests/Feature/UsersProfileTest.php +++ b/tests/Feature/UsersProfileTest.php @@ -66,8 +66,6 @@ class UsersProfileTest extends TestCase $this->submitForm(trans('app.update'), [ 'email' => 'user@mail.com', 'password' => 'Secr3t', - 'new_password' => 'Secr3t2', - 'new_password_confirmation' => 'Secr3t2', ]); $user = $user->fresh(); From 1231f5dc1e070a45e40836b37c55ee7ce58faa58 Mon Sep 17 00:00:00 2001 From: Cendekia Pramana Putra Date: Thu, 18 Oct 2018 10:52:57 +0700 Subject: [PATCH 4/9] add change password feature --- app/Http/Controllers/ChangePasswordController.php | 25 ++++++++ app/Http/Requests/Users/UpdatePasswordRequest.php | 39 ++++++++++++ resources/lang/en/auth.php | 3 + resources/lang/id/auth.php | 3 + resources/views/layouts/partials/nav.blade.php | 1 + resources/views/users/change-password.blade.php | 74 +++++++++++++++++++++++ routes/web.php | 3 + 7 files changed, 148 insertions(+) create mode 100644 app/Http/Controllers/ChangePasswordController.php create mode 100644 app/Http/Requests/Users/UpdatePasswordRequest.php create mode 100644 resources/views/users/change-password.blade.php diff --git a/app/Http/Controllers/ChangePasswordController.php b/app/Http/Controllers/ChangePasswordController.php new file mode 100644 index 0000000..245883c --- /dev/null +++ b/app/Http/Controllers/ChangePasswordController.php @@ -0,0 +1,25 @@ +password = bcrypt($request->new_password); + + if ($user->save()) $updateResponse = array('success' => trans('auth.change_password_success')); + else $updateResponse = array('error' => trans('auth.change_password_error')); + + return redirect()->back()->with($updateResponse); + } +} diff --git a/app/Http/Requests/Users/UpdatePasswordRequest.php b/app/Http/Requests/Users/UpdatePasswordRequest.php new file mode 100644 index 0000000..dddc5ea --- /dev/null +++ b/app/Http/Requests/Users/UpdatePasswordRequest.php @@ -0,0 +1,39 @@ + 'min:6|max:15|current_password', + 'new_password' => 'min:6|max:15|same_password|confirmed', + ]; + } + + public function messages() + { + return [ + 'old_password.current_password' => trans('passwords.old_password'), + 'new_password.same_password' => trans('passwords.same_password'), + ]; + } +} diff --git a/resources/lang/en/auth.php b/resources/lang/en/auth.php index 619bcaa..c97edf2 100644 --- a/resources/lang/en/auth.php +++ b/resources/lang/en/auth.php @@ -19,6 +19,7 @@ return [ 'password' => 'Password', 'login' => 'Login', 'logout' => 'Logout', + 'back' => 'Back', 'register' => 'Create new Account', 'have_an_account' => 'I have an Account', 'need_account' => 'Need an Account?', @@ -30,4 +31,6 @@ return [ 'new_password' => 'New Password', 'new_password_confirmation' => 'Repeat New Password', 'send_reset_password_link' => 'Send Reset Password Link', + 'change_password_success' => 'Your password has changed', + 'change_password_error' => 'Uh-oh, change password failed', ]; diff --git a/resources/lang/id/auth.php b/resources/lang/id/auth.php index ced9b61..e161e56 100644 --- a/resources/lang/id/auth.php +++ b/resources/lang/id/auth.php @@ -19,6 +19,7 @@ return [ 'password' => 'Password', 'login' => 'Login', 'logout' => 'Keluar', + 'back' => 'Kembali', 'register' => 'Buat Akun Baru', 'have_an_account' => 'Saya sudah punya Akun', 'need_account' => 'Belum punya Akun?', @@ -30,4 +31,6 @@ return [ 'new_password' => 'Password Baru', 'new_password_confirmation' => 'Ulangi Password Baru', 'send_reset_password_link' => 'Kirim Link Reset Password', + 'change_password_success' => 'Password Anda sudah berhasil dirubah.', + 'change_password_error' => 'Awww, sistem gagal merubah password Anda', ]; diff --git a/resources/views/layouts/partials/nav.blade.php b/resources/views/layouts/partials/nav.blade.php index 116cf73..efeda1f 100644 --- a/resources/views/layouts/partials/nav.blade.php +++ b/resources/views/layouts/partials/nav.blade.php @@ -40,6 +40,7 @@
+@endsection diff --git a/routes/web.php b/routes/web.php index d0a974b..4265ef6 100644 --- a/routes/web.php +++ b/routes/web.php @@ -24,6 +24,9 @@ Route::post('family-actions/{user}/add-wife', 'FamilyActionsController@addWife') Route::post('family-actions/{user}/add-husband', 'FamilyActionsController@addHusband')->name('family-actions.add-husband'); Route::post('family-actions/{user}/set-parent', 'FamilyActionsController@setParent')->name('family-actions.set-parent'); +Route::get('profile/update-password', 'ChangePasswordController@show')->middleware('auth')->name('profile.change-password.form'); +Route::post('profile/update-password', 'ChangePasswordController@update')->middleware('auth')->name('profile.change-password.update'); + Route::get('profile-search', 'UsersController@search')->name('users.search'); Route::get('users/{user}', 'UsersController@show')->name('users.show'); Route::get('users/{user}/edit', 'UsersController@edit')->name('users.edit'); From 324e05796fb1de74c44b82ccf59fcfe2ab21b81c Mon Sep 17 00:00:00 2001 From: Cendekia Pramana Putra Date: Thu, 18 Oct 2018 10:58:32 +0700 Subject: [PATCH 5/9] add localization at change password nav label --- resources/views/layouts/partials/nav.blade.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/views/layouts/partials/nav.blade.php b/resources/views/layouts/partials/nav.blade.php index efeda1f..e8727d6 100644 --- a/resources/views/layouts/partials/nav.blade.php +++ b/resources/views/layouts/partials/nav.blade.php @@ -40,7 +40,7 @@