Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

Bahast7's avatar

Call to a member function roles() on null

Hello developers, please can you help me with that problem

I have a laravel project that I want to verify the user's phone number by twillio and I used their documentation , while I want to sign up it gets me this error Call to a member function roles() on null I am using Listeners for a registered user to assign a role for them and this error is in this Listener these are my codes thanks Note: the verification code delivers successfully

controller -> auth -> RegisterController.php

protected function create(array $data)
    {
        $token = getenv("TWILIO_AUTH_TOKEN");
        $twilio_sid = getenv("TWILIO_SID");
        $twilio_verify_sid = getenv("TWILIO_VERIFY_SID");
        $twilio = new Client($twilio_sid, $token);
        $twilio->verify->v2->services($twilio_verify_sid)
            ->verifications
            ->create($data['phone_number'], "sms");
        User::create([
            'name' => $data['name'],
            'phone_number' => $data['phone_number'],
            'password' => Hash::make($data['password']),
        ]);
    }
    protected function verify(Request $request)
    {
        $data = $request->validate([
            'verification_code' => ['required', 'numeric'],
            'phone_number' => ['required', 'string'],
        ]);
        /* Get credentials from .env */
        $token = getenv("TWILIO_AUTH_TOKEN");
        $twilio_sid = getenv("TWILIO_SID");
        $twilio_verify_sid = getenv("TWILIO_VERIFY_SID");
        $twilio = new Client($twilio_sid, $token);
        $verification = $twilio->verify->v2->services($twilio_verify_sid)
            ->verificationChecks
            ->create($data['verification_code'], array('to' => $data['phone_number']));
        if ($verification->valid) {
            $user = tap(User::where('phone_number', $data['phone_number']))->update(['isVerified' => true]);
            /* Authenticate user */
            Auth::login($user->first());
            return redirect()->route('home')->with(['message' => 'Phone number verified']);
        }
        return back()->with(['phone_number' => $data['phone_number'], 'error' => 'Invalid verification code entered!']);
    }

vendor/laravel/ui/auth-backend/RegistersUsers.php


public function register(Request $request)
    {
        $this->validator($request->all())->validate();

        event(new Registered($user = $this->create($request->all())));

        $this->guard()->login($user);

        if ($response = $this->registered($request, $user)) {
            return $response;
        }

        return $request->wantsJson()
                    ? new JsonResponse([], 201)
                    : redirect()->route('verify')->with(['phone_number' => $request->phone_number]);
    }

app/Listeners/AssignRoleForRegisteredUser.php

class AssignRoleForRegisteredUser
{
    protected $defaultRole;
    protected $user;

    /**
     * Create the event listener.
     */
    public function __construct()
    {
        $this->defaultRole = config('project.registered_user_role');
    }

    /**
     * Handle the event.
     *
     * @param object $event
     */
    public function handle(Registered $event)
    {
        $this->user = $event->user;

        if (!$this->hasRole($this->defaultRole)) {
            $this->attachRole($this->defaultRole);
        }
    }

    protected function hasRole(string $name)
    {
        return $this->user->roles()->where('title', $name)->exists();
    }

    protected function attachRole(string $name)
    {
        if ($role = Role::where('title', $name)->first()) {
            $this->user->roles()->attach($role);
        }
    }
}

Thanks Alot

0 likes
2 replies
Shaden's avatar

Try this

 Auth::guard('web')->login($user->first());
SilenceBringer's avatar

@bahast7 the problem is that in your listener your $event->user is null

    public function handle(Registered $event)
    {
		dd($event->user); // <-- this is null
        $this->user = $event->user;

        if (!$this->hasRole($this->defaultRole)) {
            $this->attachRole($this->defaultRole);
        }
    }

Can you show Registered event? Check that you set correctly pulic prop user

Please or to participate in this conversation.