简体   繁体   English

发送email验证码到laravel中的另一个base_url

[英]Send email verification code to another base_url in laravel

I have two laravel systems and both connected to one master database我有两个 laravel 系统并且都连接到一个主数据库

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.在验证 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.目前,如果用户直接通过客户门户创建帐户,用户会收到验证 email,如果他/她在 60 分钟内点击链接,则帐户会得到验证并激活。

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.但是现在当管理员通过管理面板(admin.test)为客户创建用户帐户时,需要进行相同的过程。

Following is my user create function in the controller以下是我的用户在 controller 中创建 function

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,这里也是用户创建成功,email 也发送到用户的 email 但问题是验证链接的基础 url....点击该链接,它会将客户带到一个链接,例如,

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..由于客户不允许管理面板用户收到 403 禁止消息..

So how can I change this Base url???那么我该如何更改这个 Base url ???

event(new Registered($user));

handles the email sending once when the user is being created..处理 email 在创建用户时发送一次。

In your SendRegisterMailNotification you need to correctly add the base URL you want.在您的SendRegisterMailNotification ,您需要正确添加所需的基础 URL。 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.它可以是你想要的任何东西,或者你可以将它作为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.
    }
}

In your EventServiceProvider you need to create your custom listener for Registered在您的EventServiceProvider中,您需要为Registered创建自定义侦听器

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

Where you will handle your logic to set the base url您将在哪里处理设置基础 url 的逻辑

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM