Skip to content

4. Register

dungda-0794 edited this page Feb 13, 2023 · 11 revisions

Register use service from package.

Note: Validation & logic register inside service

Features

  • Validate attributes
  • Callback use model
  • Save model to database

Example

POST /register
  • Parameters
Request Field Field Type Required Field Desc
username string true username for user
password string true password for user
email string true email for user
  • Responses
Response Field Field Type Required Field Desc
id integer true id for user
username string true username for user
email string true email for user
curl -X 'POST' \
  'http://localhost/api/register' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
  "username": "user123456",
  "password": "passwordRequired@123",
  "email": "testuser02@local.ltd"
}'
{
  "id": 13,
  "email": "testuser02@local.ltd",
  "username": "user123456"
}

Usage

Make route function the following:

# routes/api.php
Route::post('register', 'AuthController@register');

Make the register function the following:

# App\Http\Controllers\AuthController
public function register(Request $request)
{
    $rules = [];
    $fields = $request->only(['username', 'password', 'email']);

    $result = $this->service->register($fields, $rules, function ($entity) {
        return $entity->only(['id', 'email', 'username']);
    });

    return response()->json($result);
}

Sequence

Sun_ Auth _ Architecture Design-Register

Explain

Interface

/**
* [register]
* @param  array         $fields    [The user's attributes for register.]
* @param  array         $rules     [The rules for register validate.]
* @param  callable|null $callback  [The callback function response entity model.]
* @return [array]
*/
public function register(array $params = [], array $rules = [], callable $callback = null): array;

1. Validator

# SunAsterisk\Auth\AuthJWTService;
public function register(array $params = [], array $rules = [], callable $callback = null): array
{
    if (empty($rules)) {
        $rules = [
            'username' => ['required', 'string', "unique:{$table}," . $this->username()],
            'password' => [
                'required',
                'min:6',
                'regex:/^.*(?=.{3,})(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[\d\x])(?=.*[!@#$%]).*$/',
            ],
        ];

        if (isset($params['email'])) {
            $rules['email'] = ['required', 'string', "unique:{$table},email"];
        }
    }
    ...
}

2. Hash Password

# SunAsterisk\Auth\AuthJWTService;
public function register(array $params = [], array $rules = [], callable $callback = null): array
{
    ...
    $params[$this->passwd()] = Hash::make($params[$this->passwd()]);
}

3. Insert params to database

# SunAsterisk\Auth\AuthJWTService;
public function register(array $params = [], array $rules = [], callable $callback = null): array
{
    ...
    $item = $this->repository->create($params);
}

Method register will return an array

Custom register

You can changes or validate attributes as following

# App\Http\Controllers\AuthController
public function register(Request $request)
{
    $fields = $request->only(['password', 'email']);
    // customer validate
    $rules = [
        'email' => 'required|email',
        'password' => 'required',
    ];

    $result = $this->service->register($fields, $rules);

    return response()->json($result);
}

Clone this wiki locally