]> _ Git - pmi.git/commitdiff
wip #5788 @6:30 mot de passe oublié
authorsoufiane <soufiane@cubedesigners.com>
Tue, 13 Jun 2023 15:59:39 +0000 (17:59 +0200)
committersoufiane <soufiane@cubedesigners.com>
Tue, 13 Jun 2023 15:59:39 +0000 (17:59 +0200)
app/Console/Kernel.php
app/Http/Controllers/ClientForgotPassword.php
app/Models/AuthClient.php
app/Providers/AuthServiceProvider.php
app/Templates/ChangePassword.php
config/auth.php
resources/views/pages/change_password.blade.php [new file with mode: 0644]
resources/views/pages/sign_in.blade.php
routes/web.php

index 1f5aeaebb4b135309b46d3d9d679ddeb0d5bfc87..f71acc8353234207a39759500850f2ec8c511a47 100644 (file)
@@ -28,6 +28,7 @@ class Kernel extends ConsoleKernel
         $schedule->command('backup:run')->daily()->at('05:00');
         $schedule->command('cubist:search:index', ['PMI', 'all'])->cron('35 */4 * * *');
         $schedule->command('cubist:search:index', ['MICHSCI', 'all'])->cron('5 */4 * * *');
+        $schedule->command('auth:clear-resets')->everyFifteenMinutes();
     }
 
     /**
index 5ebfc52934978af89cb3ce8173fbc4d1a44a5ba6..747893a705e15bde1bbf56f7a7ea4f81efdd6de3 100644 (file)
@@ -2,16 +2,21 @@
 
 namespace App\Http\Controllers;
 
-
+use App\Models\AuthClient;
+use App\User;
 use App\Models\Client;
-use Illuminate\Support\Facades\Mail;
+use Cubist\Backpack\app\Magic\Menu\Menu;
+use Illuminate\Auth\Events\PasswordReset;
 use Illuminate\Support\Facades\Password;
 use Illuminate\Http\Request;
-use Illuminate\Auth\Passwords\CanResetPassword;
-use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract;
-use Illuminate\Foundation\Auth\User as Authenticatable;
+use Illuminate\Support\Facades\Hash;
+use Illuminate\Support\Str;
+use Cubist\Backpack\app\Http\Controllers\CubistPageController;
+use Illuminate\Support\Facades\DB;
+use Illuminate\Auth\Notifications\ResetPassword;
+use Illuminate\Auth\Passwords\PasswordBroker;
 
-class ClientForgotPassword
+class ClientForgotPassword extends CubistPageController
 {
     /*
     |--------------------------------------------------------------------------
@@ -23,30 +28,48 @@ class ClientForgotPassword
     | your application to your users. Feel free to explore this trait.
     |
     */
-    use CanResetPassword;
 
     public function test(Request $request) {
         $request->validate(['email' => 'required|email']);
 
-        $email = $request->only('email');
-        $contents = "";
-
-        $client =  Client::where('email', $email['email'])->first();
-
-        $token = Password::createToken($client);
+        $status = Password::sendResetLink(
+            $request->only('email')
+        );
 
-        dd($token);
-
-        Mail::raw($contents, function ($message) use($email) {
-            $message->from(config('mail.from.address'), config('mail.from.name'));
-            $message->sender(config('mail.from.address'), config('mail.from.name'));
-            $message->to($email);
-            $message->bcc('test+pmi@cubedesigners.com');
-            $message->subject("Mise à jour");
-        });
+        //$url = 'https://example.com/reset-password?token='.$token;
+        //$this->notify(new ResetPasswordNotification($url));
 
         return $status === Password::RESET_LINK_SENT
             ? back()->with(['status' => __($status)])
             : back()->withErrors(['email' => __($status)]);
     }
+
+    public function reset(Request $request) {
+        $request['email'] = str_replace('%40', '@', $request->email);
+        $request->validate([
+            'token' => 'required',
+            'email' => 'required|email',
+            'password' => 'required|min:8|confirmed',
+        ]);
+
+        $password = $request->password;
+        $email = $request->email;
+
+        $actualToken = DB::table('password_resets')->where('email', $request->email)->first();
+        $tokenIsValid = Hash::check($request->token, $actualToken->token);
+
+        // Validate the token
+        if (!$tokenIsValid)
+           return back()->withErrors(['error' => 'error']);
+
+        $client = Client::where('email', $email)->first();
+        if (!$client) return redirect()->back()->withErrors(['email' => 'Email non trouvé']);
+
+        //Hash and update the new password
+        $client->password = Hash::make($password);
+        $client->update();
+
+        return redirect('/se-connecter');
+        //return redirect()->route('se-connecter')->with('status', __('Mot de passe changer avec succès'));
+    }
 }
index ada747ee1c3f40492090faa8000369ec2c247c26..46d642a17aed3bca730e2ce2a0648f8433363040 100644 (file)
@@ -1,11 +1,19 @@
 <?php
 namespace App\Models;
 
+use Illuminate\Auth\Passwords\CanResetPassword;
+use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract;
 use Illuminate\Foundation\Auth\User as Authenticatable;
+use Illuminate\Notifications\Notifiable;
+use Illuminate\Auth\Notifications\ResetPassword;
+use Illuminate\Auth\Passwords\PasswordBroker;
 
-class AuthClient extends Authenticatable
+class AuthClient extends Authenticatable implements CanResetPasswordContract
 {
 
+    use CanResetPassword;
+    use Notifiable;
+
     protected $table = 'clients';
 
     /**
@@ -25,4 +33,13 @@ class AuthClient extends Authenticatable
     protected $hidden = [
         'remember_token',
     ];
+
+    public function sendPasswordResetNotification($token) {
+        // The trick is first to instantiate the notification itself
+        ResetPassword::createUrlUsing(function ($user, string $token) {
+            return 'https://example.com/reset-password?token='.$token;
+        });
+
+        $this->notify(new ResetPasswordNotification($token));
+    }
 }
index 9784b1a3003a2864ecba016ab4f0382e7eb514f5..335cfd1db86100ee2b6e8b41d843c127a4093755 100644 (file)
@@ -4,6 +4,8 @@ namespace App\Providers;
 
 use Illuminate\Support\Facades\Gate;
 use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
+use App\Models\AuthClient;
+use Illuminate\Auth\Notifications\ResetPassword;
 
 class AuthServiceProvider extends ServiceProvider
 {
@@ -24,7 +26,6 @@ class AuthServiceProvider extends ServiceProvider
     public function boot()
     {
         $this->registerPolicies();
-
         //
     }
 }
index 8ad5d47601c438dc77fa3d52bab96b919e065b05..ccb8962cb998723444ad6c2d8fbc082494899f97 100644 (file)
@@ -4,6 +4,8 @@
 namespace App\Templates;
 
 
+use Cubist\Backpack\app\Magic\Menu\PageItem;
+
 class ChangePassword extends Base
 {
     public function getName()
@@ -15,4 +17,12 @@ class ChangePassword extends Base
     {
         parent::init();
     }
+
+    public function setData(&$data)
+    {
+        $token = request()->get('token');
+        $email = request()->get('email');
+        $data['token'] = $token;
+        $data['email'] = $email;
+    }
 }
index b76695215d79e9c97f1fd2f4a3cea607b85ba3c2..cbbea98cef541ff469ae53d027287fb3399d880d 100644 (file)
@@ -107,6 +107,11 @@ return [
             'table' => 'password_resets',
             'expire' => 60,
         ],
+        'clients' => [
+            'provider' => 'clients',
+            'table' => 'password_resets',
+            'expire' => 60,
+        ]
     ],
 
 ];
diff --git a/resources/views/pages/change_password.blade.php b/resources/views/pages/change_password.blade.php
new file mode 100644 (file)
index 0000000..07f62f9
--- /dev/null
@@ -0,0 +1,38 @@
+@extends('layouts/app')
+
+@section('content')
+    <div class="signin column bg-grey-200 p-24 mx-auto mb-20">
+        <div class="signin-form">
+            <div class="ajax-form flex flex-col max-w-half">
+                <div class="form-info text-navy mb-10">
+                    <h1 class="text-4xl m-0">{{ $title }}</h1>
+                </div>
+
+                <form id="signin-form" class="form-portal" action="{{ route('password.update') }}"
+                      method="post">
+                    @csrf
+                    <input type="hidden" name="token" value="{{ $token }}"/>
+                    <input type="hidden" name="email" value="{{ htmlentities(urlencode($email), ENT_QUOTES, 'UTF-8', false) }}" />
+                    <div class="form-group mb-12 fields grid">
+                        <label class="form-input text-navy mb-6">
+                            {{ __('Mot de passe') }}<span>*</span>
+                            <input class="py-3 mt-3" type="password" required="required" name="password" />
+                        </label>
+                        <label class="form-input text-navy">
+                            {{ __('Confirmer mot de passe') }}<span>*</span>
+                            <input class="py-3 mt-3" type="password" required="required" name="password_confirmation" />
+                        </label>
+                        @error('password')
+                        <span>{{ $message }}</span>
+                        @enderror
+                    </div>
+                    <div class="form-footer flex flex-wrap-reverse justify-between items-center">
+                        <button class="checkemail form-submit-button btn btn-custom xs:w-full">
+                            {{ __('Envoyer') }}
+                        </button>
+                    </div>
+                </form>
+            </div>
+        </div>
+    </div>
+@endsection
index f7195a2ba916209d8f24af3e593f5c98b9ee6d6f..a3a16d9ad2d8be480a55b373427f4272a9b6ebdc 100644 (file)
@@ -70,7 +70,7 @@
                         </label>
                     </div>
                     <div class="mb-5" v-if="emailExist">
-                        <a href="">Mot de passe oublié ?</a>
+                        <a href="/mot-de-passe-oublie">Mot de passe oublié ?</a>
                     </div>
                     <div class="form-group mb-5">
                         <label class="flex items-center">
index 7a81c271daaf99dc53f9bf8be322e35b4d217f1f..a0aac26991c469247e33f0591276c418d585e656 100644 (file)
@@ -3,6 +3,10 @@ Route::get('/deconnexion', 'ClientController@logout');
 
 Route::post('/mot-de-passe-oublie', 'ClientForgotPassword@test');
 
+Route::get('/changer-votre-mot-de-passe/{token}', 'ClientForgotPassword@catchall')->name('password.reset');
+
+Route::post('/reset-password', 'ClientForgotPassword@reset')->name('password.update');
+
 //add specific name to be simple to add active class
 //add middleware to secure this specific page
 Route::any('{page}', 'PageController@catchall')->where(