$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();
}
/**
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
{
/*
|--------------------------------------------------------------------------
| 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'));
+ }
}
<?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';
/**
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));
+ }
}
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
{
public function boot()
{
$this->registerPolicies();
-
//
}
}
namespace App\Templates;
+use Cubist\Backpack\app\Magic\Menu\PageItem;
+
class ChangePassword extends Base
{
public function getName()
{
parent::init();
}
+
+ public function setData(&$data)
+ {
+ $token = request()->get('token');
+ $email = request()->get('email');
+ $data['token'] = $token;
+ $data['email'] = $email;
+ }
}
'table' => 'password_resets',
'expire' => 60,
],
+ 'clients' => [
+ 'provider' => 'clients',
+ 'table' => 'password_resets',
+ 'expire' => 60,
+ ]
],
];
--- /dev/null
+@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
</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">
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(