Laravel проблема с ссылкой для подтверждения адреса электронной почты - PullRequest
0 голосов
/ 30 апреля 2020

В моем приложении laravel URL-адрес приложения выглядит примерно так: admin.site, и я регистрирую пользователей в своем приложении из панели администратора.

И URL моего клиентского портала - 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 Ответ

1 голос
/ 30 апреля 2020

Для приложения, которое может отправлять много электронных писем, полезно использовать уведомления для электронных писем. Уведомление можно создать, выполнив следующую команду:

php artisan make:notification SendRegisterEmailNotifcation

Эта команда создаст файл SendRegisterEmailNotifcation , который можно найти, перейдя к приложению / Уведомления /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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...