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.
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');
You should extend User, not Model in order to have markEmailAsVerified available in Businessuser: