Пользовательская таблица Laravel с токеном API - PullRequest
0 голосов
/ 12 октября 2019

Я использую пользовательскую таблицу customer для входа в систему, а также Laravel Passport для создания токена для моего мобильного приложения Ionic. Я застрял в коде входа, где мне нужно сгенерировать токен после запроса из моей пользовательской таблицы.

Ниже приведен код входа в систему ... Я могу успешно получить идентификатор из базы данных, но как связать его с токеном?

public function login(Request $request)
{
    $phone = $request->input('phone');
    $password = $request->input('password');
    $user = $token = array();

    try {
        $rs_login = DB::select("select a.id from customer a where a.active > 0 and a.phone = ? and a.password = ?", [$phone, $password]);
        $numrow_login = count($rs_login);

        if ($numrow_login != 1) {
            $this->error['form-message'] = 'ERR' . __LINE__ . ': Invalid phone number or password';
        } else {
            $user['id'] = $rs_login[0]->id;
        }
    } catch (\Illuminate\Database\QueryException $ex) {
        $this->error['form-message'] = 'Login service is unavailable';
    }

    if ($this->error == '') {
        $tokenResult = $user['id']->createToken('Personal Access Token'); // How to pass the $user['id'] to generate token?
        $token = $tokenResult->token;
        $token->save();

        $token['access_token'] = $tokenResult->accessToken;
        $token['token_type'] = 'Bearer';
        $token['expires_at'] = Carbon::parse(
        $tokenResult->token->expires_at
        )->toDateTimeString();
    }

    if ($this->error == '') {
        $response['status'] = 'success';
        $response['message'] = 'Login successful';
        $response['token'] =  $token;
    } else {
        $response['status'] = 'error';
        $response['error'] =  $this->error;
        $response['message'] = (isset($this->error['form-message'])) ? $this->error['form-message'] : 'Please check the form';
    }

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

1 Ответ

1 голос
/ 12 октября 2019

Вы можете просто указать пользовательскую таблицу в config/auth.php вместо перезаписи всей логики

'api' => [
    'driver' => 'token',
    'provider' => 'customer', // <--- Here
    'hash' => false,
],

И создать провайдера для использования конкретной таблицы из базы данных

'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => App\User::class,
    ],

    'customer' => [
        'driver' => 'database',
        'table' => 'customer',
    ],
],

И сохраняйте стандартное поведение при входе в систему для паспорта

Надеюсь, это поможет

...