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

devondahon's avatar

Using the default RegisterController to register from API

Is it recommended to re-user the default RegisterController to register from API or is it easier to create a new one ?

I tried to use the default one, but I didn't figure out how to pass name/login/password to the $data variable of the RegisterController.

0 likes
7 replies
devondahon's avatar

I'm already using Laravel Passport (with Password Grant Token) to login user. Also, my SPA is on a different domain, so I can't use Sanctum.

martinbean's avatar
Level 80

@devondahon Create a controller that creates a user. The register controller that comes with Laravel will try and log the user in; you don’t want that.

It’s not that complicated:

namespace App\Http\Controllers\Api;

use Illuminate\Auth\Events\Registered;
use Illuminate\Routing\Controller;

class UserController extends Controller
{
    public function store(StoreUserRequest $request)
    {
        $user = User::create($request->validated());

        event(new Registered($user));

        return new UserResource($user);
    }
}
1 like
devondahon's avatar

@martinbean Thank you very much Martin !! It works great !

Below is my homework according to your hints and two questions.

UserController:

<?php

namespace App\Http\Controllers\Api;

use Illuminate\Auth\Events\Registered;
use Illuminate\Routing\Controller;
use App\Models\User;
use App\Http\Resources\User as UserResource;
use App\Http\Requests\StoreUser as StoreUserRequest;

class UserController extends Controller
{
    public function store(StoreUserRequest $request)
    {
        $user = User::create($request->validated());

        event(new Registered($user));

        return new UserResource($user);
    }
}

StoreUserRequest:

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class StoreUser extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'name' => ['required', 'string', 'max:255'],
            'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
            'password' => ['required', 'string', 'min:8']
        ];
    }
}

UserResources:

<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\JsonResource;

class User extends JsonResource
{
    /**
     * Transform the resource into an array.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return array
     */
    public function toArray($request)
    {
        return parent::toArray($request);
    }
}
  1. My password is stored in clear, where should I set Hash::make($request['password']) ?
  2. Would it better to hash the password in the frontend before sending it ?
UhOh's avatar

Hash it with a mutator in the User model so you never have to worry about someone forgetting to hash it.

devondahon's avatar

@uhoh Good idea! So, I just added this to my User model:

    public function setPasswordAttribute($password)
    {
        $this->attributes['password'] = Hash::make($password);
    }

Please or to participate in this conversation.