'Sending custom verification emails from a controller method

I have some data i am receiving from new users and extracting the email to send to the new user. This is how i am doing it

public function register_mechanic_post(Request $request)
    {
        
            $validatedData = $request->validate([
                'email' => 'required|email|unique:users',
                'password' => 'required',
                'password_confirmation' => 'required'
            ], [
                'email.required' => 'Email address is required',
                'password.required' => 'Password field is required',
                'password_confirmation.required' => 'Password confirmation field is required'
            ]);
            
             $data = $request->all();
             $name = $request->input('name');
             $data['role'] = 'manager';
             
             $email = $request->input('email');
             User::create([
            'email' => $request->input('email'),
            'name' => $request->input('name'),
            'role' => 'manager',
            'password' => Hash::make($request->input('password')),
            //'email_verified_at' => now()
        ]);
         $user = User::where('email','=',$email)->first();
         $user->sendEmailVerificationNotification();

        
    return back()->with('success', 'Mechanic created successfully.');
    }

I am getting this error

403 THIS ACTION IS UNAUTHORIZED

The docs say its because of signed urls https://laravel.com/docs/9.x/urls#signed-urls

I haven't modified the existing email verification code as shipped with laravel. How do i use the signed urls feature in my case?.



Solution 1:[1]

Not an answer, but your code could be significantly simpler, making it easier to manage in the future.

    public function register_mechanic_post(Request $request)
    {
        
        $validatedData = $request->validate([
                'name' => 'required',
                'email' => 'required|email|unique:users',
                'password' => 'required',
                'password_confirmation' => 'required'
            ], [
                'email.required' => 'Email address is required',
                'password.required' => 'Password field is required',
                'password_confirmation.required' => 'Password confirmation field is required'
            ]);
                         
        $user = User::create([
            'email' => $validatedData['email'],
            'name' => $validatedData['name'],
            'role' => 'manager',
            'password' => Hash::make($validatedData['password']),
            'email_verified_at' => now()
        ]);

        $user->sendEmailVerificationNotification();

        
    return back()->with('success', 'Mechanic created successfully.');
    }

But why ask the user to verify their email when you are already setting the email_verified_at timestamp (indicating that verification has been performed)

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Snapey