Laravel电子邮件验证链接问题

时间:2020-04-30 09:49:59

标签: php laravel email laravel-5 email-verification

在laravel应用程序的应用程序URL中,admin.site如下所示,我正在从管理面板中将用户注册到我的应用程序中。

我的客户门户网址为customer.site

一旦管理员从管理面板(admin.site)创建用户,客户就会收到帐户验证电子邮件。但是问题是我现在需要这个验证链接

customer.site/email/...

但是当前链接是这样的

admin.site/email/...

那么我该如何将该验证链接更改为customer.site

以下是我对客户控制器的存储功能

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));

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

我正在发送验证电子邮件

event(new Registered($user));

由于客户无权访问管理站点,因此出现403错误消息。

1 个答案:

答案 0 :(得分:1)

对于可能发送大量电子邮件的应用程序,使用电子邮件通知是很有用的。 可以通过执行以下命令来创建通知:

php artisan make:notification SendRegisterEmailNotifcation

此命令将创建一个 SendRegisterEmailNotifcation 文件,该文件可通过导航到 app / Notifications / SendRegisterEmailNotifcation.php 路径找到。 完成此操作并自定义消息,操作和其他可能的操作后,存储功能将如下所示。 我已经删除了验证并将其放入请求中。如果您对它的工作方式很感兴趣,可以在下面找到一个示例。

有关通知的更多信息,请参见:https://www.cloudways.com/blog/laravel-notification-system-on-slack-and-email/

// CustomerController
public function store(StoreCustomerRequest $request)
{
    // Get input from the request and hash the password
    $input = $request->all();
    $input['password'] = Hash::make($input['password']);

    // Create user and assign role
    $user = User::create($input);
    $user->assignRole($request->input('roles'));

    // Send Register Email
    $user->notify(new SendRegisterEmailNotifcation);

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

我建议创建用于验证数据的请求。这样,控制器将保持清洁,您实际上可以在laravel想要的地方验证数据。 // StoreCustomerRequest

class StoreCustomerRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return Auth::check();
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        // @todo Add validation rules
        return [
            'name' => 'required|string|max:255',
            'last_name' => 'required|alpha|min:2|max:255'
            'email' => 'required|string|email|max:255|unique:users',
        ];
    }
}

将通知对象添加到您的客户模型。必须这样做才能发送通知。

// Customer model
class Customer {
    use Notifiable;
}