Отправить подтверждение по электронной почте, когда оно будет изменено пользователем позже laravel - PullRequest
0 голосов
/ 01 апреля 2020

Я разрабатываю систему с пользователями, которым необходимо проверить свои адреса электронной почты. При регистрации это нормально, по умолчанию почти laravel функция (с использованием vue auth). Тем не менее, я могу дать пользователям свое мнение, изменить их адрес электронной почты в любое время.

Так что я сохранил пользователей в своей БД, и у них есть столбец "email" и столбец "email_verified_at". Когда пользователь регистрируется, электронное письмо с подтверждением отправляется, и для параметра «email_verified_at» по умолчанию установлено значение NULL. Это нормально.

Когда пользователь изменяет свою электронную почту внутри моего приложения как зарегистрированный пользователь, у меня возникают две проблемы:

1 Как я могу снова установить значение NULL на "email_verified_at"? Это дата и время, поэтому, когда пользователь проверяет свою электронную почту, дата и время сохраняются там. Когда он меняет адрес электронной почты, мне нужно снова установить это значение в NULL, как я могу это сделать?

2 Как я могу заставить Laravel отправить новое письмо с подтверждением по ссылке для подтверждения? Есть ли какой-нибудь метод или что-то подобное?

Я даже пытался использовать метод загрузки в моем пользовательском модуле, но он тоже не работает (не выдавая по крайней мере ошибку)

protected static function boot()
    {
        parent::boot();

        static::updating(function (User $setting) {
            if (in_array('email', $setting->getChanges())) {
                $setting->email_verified_at = null;
                $setting->sendEmailVerificationNotification();
            }
        });
    }

И после моя функция обновления в контроллере профиля,

 public function update(Request $request, User $setting)
        {

            $changedAttributes = array_diff($request->all(), $setting->getAttributes());

            $validationRules = array_intersect_key([
               'name'      => ['required', 'alpha','min:2', 'max:255'],
               'last_name' => ['required', 'alpha','min:5', 'max:255'],
               'mobile'    => ['required', 'numeric','min:9','regex:/\+(9[976]\d|8[987530]\d|6[987]\d|5[90]\d|42\d|3[875]\d|
               2[98654321]\d|9[8543210]|8[6421]|6[6543210]|5[87654321]|
               4[987654310]|3[9643210]|2[70]|7|1)\d{1,14}$/'],
               'email'     => ['required', 'string', 'email', 'max:255', 'unique:users,email,'.$setting->id.''],
               'propic' => ['required','image','mimes:jpeg,png,jpg,gif,svg','max:2048'],
           ], $changedAttributes);

           if($request->hasFile('propic'))
           {
                $this->validate($request, [
                    'name' => ['required', 'alpha','min:2', 'max:255'],
                    'last_name' => ['required', 'alpha','min:5', 'max:255'],
                    'mobile' => ['required', 'numeric','min:9','regex:/\+(9[976]\d|8[987530]\d|6[987]\d|5[90]\d|42\d|3[875]\d|2[98654321]\d|9[8543210]|8[6421]|6[6543210]|5[87654321]|4[987654310]|3[9643210]|3[70]|7|1)\d{1,14}$/'],
                    'email' => ['required', 'string', 'email', 'max:255', 'unique:users,email,'.$setting->id.''],
                    'propic' => ['required','image','mimes:jpeg,png,jpg,gif,svg','max:2048'],
                ],$request->all());

                $imageName = time().'.'.$request->propic->extension();  
                $request->propic->move(public_path('propics'), $imageName);
                $setting->propic=$imageName;
                $setting->name=$request->input('name');
                $setting->last_name=$request->input('last_name');
                $setting->mobile=$request->input('mobile');
                $setting->email=$request->input('email');
                $setting->update();
                return Redirect::back()->with('success',__('sentence.User updated successfully'));  
           }

           $this->validate($request, $validationRules);

           $setting->update($changedAttributes);

           return Redirect::back()->with('success',__('sentence.User updated successfully'));  

        }
...