1
votes

I have two laravel systems and both connected to one master database

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

Customers are not allowed to access to the admin portal

But admin can create customers from admin dashboard.

Customers cannot' login to their profile until they verify their email.

Currently if an user creates an account directly through the customer portal, the user receive the verification email and if he/she clicks on the link with in 60 minutes, account get verified and activated.

verification link look like this:

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

But now when the admin creates an user account for a customer through the admin panel(admin.test)same process need to be happened.

Following is my user create function in the controller

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.  ');
    }

Here also user create successfully, email also send to the user's email BUT the issue is verification link's base url.... it has to be, customer.test but it inclludes admin.test.....So now when ever a user clicks on that link it'll take customer to a link like,

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

As the customers are not allowed to admin panel user gets a 403 forbidden message..

So how can I change this Base url???

event(new Registered($user));

handles the email sending once when the user is being created..

2
Please show what is in your Registered event handler/listener. You'll need to add the URL in the listener to send the email. If I see the listener I can provide a solution.Etin
@ChristopheHubert where can I find that?Volka Dimitrev
@Etin, he is using the default Registered event - may need to create a custom event for thatChristophe Hubert

2 Answers

0
votes

In your SendRegisterMailNotification you need to correctly add the base URL you want. It could be any thing you want or you could add it to your app config and env as app.customer_base_url and then reference this in your Notification.

<?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.
    }
}
0
votes

In your EventServiceProvider you need to create your custom listener for Registered

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

Where you will handle your logic to set the base url