1

I am sending two different emails. One from VerifyMail and other from ForgetEmail but laravel throws error that VerifyMail does not exits. It was working just fine when i had not added the ForgetMail class. This is my code where i am using VerifyMail

<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use App\User;
use App\VerifyUser;
use Illuminate\Support\Str;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Carbon;
use App\Mail\VerifyMail;

class UserRegisterController extends Controller
{
    public function __construct()
    {
        $this->middleware('guest:user');
    }

    public function showRegisterForm() {
        return view('user.registerForm');
    }

    public function register(Request $request) {
        $userValidated = $this->validate($request, [
            'name' => 'required|string',
            'email' => 'required|string|unique:users',
            'password' => 'required|string|min:6|confirmed'
        ]);

        $register = [
            'name' => $userValidated['name'],
            'email' => $userValidated['email'],
            'password' => Hash::make($userValidated['password']),
        ];

        $user =User::create($register);
        VerifyUser::create([
            'token' => str::random(60),
            'user_id' => $user->id,
        ]);
        Mail::to($user->email)->send(new VerifyMail($user));

        return redirect('user/login')->with('email', 'An email was sent to you for verification');
    }

    public function verifyEmail($token, $date) {
        $dates = date(strtotime($date));
        if(time() - $dates > 60 * 60) {
            return redirect('/user/login')->with('failed' , 'Oops! Something went wrong');
        }
        $verifiedUser = VerifyUser::where('token', $token)->first();
        if(isset($verifiedUser)) {
            $user = $verifiedUser->user;
            if($user->email_verified_at == '') {
                $user->email_verified_at = carbon::now();
                $user->save();

                return redirect('/user/login')->with('success', 'Your email was successfully verified');
            } else {
                return redirect('/user/login')->with('failed' , 'Oops! Something went wrong');
            }
        }
    }
}

This is the code where i am using ForgetEmail

    <?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
// use Symfony\Component\HttpFoundation\Session\Session;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Cookie;
use Illuminate\Support\Facades\Session;
use App\ForgetPassword;
use Illuminate\Support\Str;
use Illuminate\Support\Facades\Mail;
use App\Mail\ForgetEmail;
use App\User;
use Illuminate\Support\Facades\Hash;

class UserLoginController extends Controller
{
    protected $guard;
    use AuthenticatesUsers;

    public function __construct()
    {
        $this->middleware('guest:user')->except('logout');
        $this->guard = Auth::guard('user');
    }

    public function showLoginForm()
    {
        return view('user.login');
    }

    public function forgetPasswordForm() {
        return view('user.forget');
    }

    public function passwordResetForm($id) {
        $user = User::where('id', $id)->first();
        return view('user.resetForm', ['id' => $id]);
    }

    public function userLogin(Request $request) {
        $validated = $this->validate($request, [
            'email' => 'required|email',
            'password' => 'required|min:6',
        ]);

        if(Auth::guard('user')->attempt(['email' => $validated['email'], 'password' => $validated['password']], $request->remember)) {
            $user = Auth::guard('user')->user();
            if($user->email_verified_at != null) {
                return redirect()->route('user.dashboard');
            } else {
                $this->logout($msg = 1);
            }
        }
        return redirect()->back();
    }

    public function forgetPassword(Request $request) {
        $email = $this->validate($request, [
            'email' => 'required|email|exists:users',
        ]);

        $forgetPass = User::where('email', $email['email'])->first();
        $forgetArray = array(
            'user_id' => $forgetPass->id,
            'token' => str::random(60),
        );
        $forgetPassword = ForgetPassword::create($forgetArray);
        Mail::to($email['email'])->send(new ForgetEmail($forgetPassword->user));

        return redirect('user/forgetPassword')->with('email', 'We have sent you an email to reset your password');
    }

    public function passwordReset($token, $date) {
        $checkTime = strtotime($date);
        if(time() - $checkTime > 20 * 60) {
            return redirect('user/login/')->with('passes', 'Looks like the link has expired');
        } 

        $passReset = ForgetPassword::where('token', $token)->first();
        if(isset($passReset)) {
            $user = $passReset->user;
            if($user->password) {
                return redirect('/user/passwordReset'. '/'. $user->id); 
            }
        }
    }

    public function passwordUpdate(Request $request, $id) {
        $validatePass = $this->validate($request, [
            'password' => 'required|string|min:6|confirmed',
        ]);

        $pass = User::where('id', $id)->first();
        $pass->password = Hash::make($validatePass['password']);
        $pass->save();

        return redirect('/user/login')->with('reset', 'Your password has been reset');
    }

    public function logout($msg = 0) {
        $cookieName = $this->guard->getRecallerName();
        $cookie = Cookie::forget($cookieName);
        Auth::logout();
        Session::flush();
        if($msg == 0) {
            return redirect()->route('user.login')->withCookie($cookie);
        } else {
            return redirect()->route('user.login')->withCookie($cookie)->with('verify', 'Your email is not verified');
        }
    }
}

All of my code was working fine before when i had not added that ForgetEmail class in Mail. I don't know what's the problem here. Will be glad if you can find it for me.

Waleed
  • 17
  • 6
  • Nothing in the `laravel.log`? Did you enable error_reporting? [How do I get PHP errors to display?](https://stackoverflow.com/questions/1053424/how-do-i-get-php-errors-to-display?rq=1) – brombeer Mar 19 '21 at 14:11
  • Pls add a complete description of the thrown an error. – Martin Osusky Mar 21 '21 at 16:59
  • I have two mail classes ok. One is VerifyMail and the other is ForgetEmail...Everything was working fine untl i had only VerifyMail class but when i added another laravel throws error that App\Maill\VerifyMail is not there. But that file is right there – Waleed Mar 24 '21 at 11:38

0 Answers0