Call to undefined method markEmailAsVerified()

56 views Asked by At

I'm stuck with this error in laravel, What I want is to verify the email address once they receive the email notification. But everytime I click the link on the email notification it has an error: " Call to undefined method App\Models\Businessuser::markEmailAsVerified()

Can somebody Help me? I've installed auth package, but Im new in using this, and I havent tried this on my codes. Just would like to know if theres something to do with the auth.

error message this is for the verify controller

<?php

namespace App\Http\Controllers;
use App\Models\Businessuser;
use Illuminate\Http\Request;
use Illuminate\Auth\Notifications\VerifyEmail;
use Illuminate\Foundation\Auth;

class VerifyemailController extends Controller
{
    public function verify($businessuser_id, Request $request)
    {
        if(!$request->hasValidSignature()){
            return response()->json(["msg"=>'Invalid/Expired url provided'], 401);
        }

        $bususer = Businessuser::find($request->route('id'));

         if($bususer->markEmailAsVerified()){
            return response()->json(["status"=>200, "msg"=>'Verified']);
        }
     
    }
}

Register Controller

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Businessuser;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Mail;
use App\Mail\Email;
use App\Mail\EmailNotification;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Validator;


class RegisterController extends Controller
{
    public function register(Request $request){
       //return view('register');


      $validateEmail = request()->validate([
                'email' => 'required|email|unique:businessusers',
        ]);


      $bususer = new Businessuser;
      $bususer->busname = $request->input('busname');
      $bususer->province = $request->input('province');
      $bususer->city = $request->input('city');
      $bususer->barangay = $request->input('barangay');
      $bususer->street = $request->input('street');

    
      $bususer->tinum = $request->input('tinum');
      $bususer->firstname = $request->input('firstname');
      $bususer->lastname = $request->input('lastname');
      $bususer->middleinitial = $request->input('middleinitial');
      
      $bususer->mobile = $request->input('mobile');
      $bususer->email = $request->input('email');   

      $bususer->save();

      Mail::to($bususer->email)->send(new EmailNotification($bususer));

       return $bususer;

    }

    public function testconnection(){
        
    }
}

Business User Model

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Concerns\HasTimestamps;
use Carbon\Carbon;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;


class Businessuser extends Model
{
    use HasFactory;

     /**
     * The attributes that are mass assignable.
     *
     * @var array<int, string>
     */

     protected $table = 'businessusers';
     protected $primaryKey = 'id';
     protected $fillable = [
        'busname',
        'province',
        'city',
        'barangay',
        'street',
        'tinum',
        'firstname',
        'lastname',
        'middleinitial',
        'owner',
        'mobile',
        'email',
     ];

     /**
     * The attributes that should be hidden for serialization.
     *
     * @var array<int, string>
     */

   // const CREATED_AT = 'created_at';
    /* const UPDATED_AT = null;*/

  

    protected $hidden = [
        'password',
        'remember_token',
    ];

     

     protected $casts = [
        'email_verified_at' => 'datetime',
    ];

 
}

api/route

<?php

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\RegisterController;
use App\Http\Controllers\VerifyemailController;


Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
    return $request->user();
});

Route::post('register', [RegisterController::class, 'register']);
Route::get('testconnection', [RegisterController::class, 'testconnection']);
Route::get('email/verify/{id}', [VerifyemailController::class, 'verify'])->name('verification.verify');

Email Html file

<h1>Congratulations! </h1>
<h1>Were Welcoming you from registering in Love Laguna</h1>
<h1>User {{$bususer->id}}</h1>
<h1>Business {{$bususer->busname}} </h1>
<h1>Click on the link to verify the email address<a href="{{URL::temporarySignedRoute('verification.verify', now()->addMinutes(30), ['id' => $bususer->id]) }}"> Verify Email</a></h1>

Routes

<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\RegisterController;
use Illuminate\Support\Facades\Auth;

Route::get('/', function () {
    return view('welcome');
});


Route::get('/register', [RegisterController::class, 'register'])->name('register');
1

There are 1 answers

0
Miquel Àngel On

You should extend User, not Model in order to have markEmailAsVerified available in Businessuser:

class Businessuser extends User