Отправить код подтверждения электронной почты на другой base_url в laravel

У меня две системы laravel, и обе подключены к одной главной базе данных

1.customer portal-customer.test
2.admin portal - admin.test

Клиентам не разрешен доступ к порталу администрирования.

Но администратор может создавать клиентов из панели администратора.

Клиенты не могут войти в свой профиль, пока не подтвердят свой адрес электронной почты.

В настоящее время, если пользователь создает учетную запись непосредственно через портал для клиентов, пользователь получает электронное письмо с подтверждением, и если он / она нажимает на ссылку в течение 60 минут, учетная запись проверяется и активируется.

ссылка для подтверждения выглядит так:

http://customer.test/email/verify/13/976bdd188ad675ad87c827ca9723fb4a7bda2178?expires=1588242534&signature=cc628ef025eb7cd03fe76093be1e9e3fdfce12f5208c185560d1996b9f662744 

Но теперь, когда администратор создает учетную запись пользователя для клиента через панель администратора (admin.test), должен происходить тот же процесс.

Ниже приведена моя функция создания пользователя в контроллере.

public function store(Request $request)
    {
        request()->validate([
            'name' => ['required', 'alpha','min:2', 'max:255'],
            'last_name' => ['required', 'alpha','min:2', 'max:255'],
            'email' => ['required','email', 'max:255', 'unique:users'],
            'password' => ['required', 'string', 'min:12', 'confirmed','regex:/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{12,}$/'],
            'mobile'=>['required', 'regex:/^\+[0-9]?()[0-9](\s|\S)(\d[0-9]{8})$/','numeric','min:9'],
            'username'=>['required', 'string', 'min:4', 'max:10', 'unique:users'],   
            'roles'=>['required'],
            'user_roles'=>['required'],
        ]);

        //Customer::create($request->all());

        $input = $request->all();
        $input['password'] = Hash::make($input['password']);

        $user = User::create($input);
        $user->assignRole($request->input('roles'));

        event(new Registered($user));
        //$user->notify(new SendRegisterMailNotification());

        return redirect()->route('customers.index')
                        ->with('success','Customer created successfully. Verification email has been sent to user email.  ');
    }

Здесь также пользователь успешно создает, электронная почта также отправляется на электронную почту пользователя, НО проблема заключается в базовом URL-адресе ссылки для подтверждения .... он должен быть, customer.test, но он включает admin.test ..... Так что теперь, когда когда-либо пользователь щелкнув по этой ссылке, клиент перейдет по такой ссылке, как,

http://admin.test/email/verify/22/3b7c357f630a62cb2bac0e18a47610c245962182?expires=1588247915&signature=7e6869deb1b6b700dcd2a49b2ec66ae32fb0b6dc99aa0405095e9844962bb53c

Поскольку клиенты не имеют доступа к панели администратора, пользователь получает сообщение 403 запрещено.

Итак, как я могу изменить этот базовый URL ???

event(new Registered($user));

обрабатывает отправку электронной почты один раз при создании пользователя.


person Volka Dimitrev    schedule 01.05.2020    source источник
comment
Пожалуйста, покажите, что находится в вашем Registered обработчике / слушателе событий. Вам нужно будет добавить URL-адрес в прослушиватель, чтобы отправить электронное письмо. Если я вижу слушателя, я могу предложить решение.   -  person Etin    schedule 01.05.2020
comment
@ChristopheHubert, где я могу это найти?   -  person Volka Dimitrev    schedule 01.05.2020
comment
@Etin, он использует событие по умолчанию Registered - может потребоваться создать для этого пользовательское событие   -  person Christophe Hubert    schedule 01.05.2020


Ответы (2)


В вашем SendRegisterMailNotification вам нужно правильно добавить базовый URL-адрес, который вы хотите. Это может быть любая вещь, которую вы хотите, или вы можете добавить ее в конфигурацию вашего приложения и env как app.customer_base_url, а затем указать это в своем уведомлении.

<?php

namespace App\Notifications;

use Illuminate\Notifications\Notification;

class SendRegisterMailNotification extends Notification
{
    ...
    public function toMail($notifiable) {
        return (new MailMessage)
            ->line('Click here to verify')
            ->action('Verify', 'http://customer.test/' . $this->url);
            //$this->url gotten however you usually get the verification url.
    }
}
person Etin    schedule 01.05.2020
comment
ну, эта строка была прокомментирована в моем коде, посмотрите внимательно - person Volka Dimitrev; 01.05.2020
comment
Пожалуйста, покажите, что находится в обработчике событий, я просил об этом ранее. Хотя логика та же. - person Etin; 01.05.2020

В вашем EventServiceProvider вам нужно создать свой собственный слушатель для Registered

    protected $listen = [
        Registered::class => [
            CustomSendEmailVerificationNotification::class,
        ],
    ];

Где вы будете обрабатывать свою логику, чтобы установить базовый URL

person Christophe Hubert    schedule 01.05.2020
comment
Извините, но я не понимаю, не могли бы вы расширить ответ? у меня уже есть это в моем EventServicerovider, protected $ listen = [Registered :: class = ›[SendEmailVerificationNotification :: class,],]; - person Volka Dimitrev; 01.05.2020