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

У меня две 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));

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

Ответы [ 2 ]

0 голосов
/ 01 мая 2020

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

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

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

0 голосов
/ 01 мая 2020

В вашем 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.
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...