首页 > 解决方案 > 带有 API 令牌的 Laravel 自定义表

问题描述

我正在使用自定义表customer进行登录,还使用 ​​Laravel Passport 为我的 Ionic 移动应用程序生成令牌。我被困在登录代码中,我需要在从自定义表查询后生成令牌。

下面是登录代码...我可以成功地从数据库中检索 id 但如何将其与令牌链接?

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);
}

标签: laraveltokenlaravel-passport

解决方案


您可以只指定一个自定义表,config/auth.php 而不是重写整个逻辑

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

并创建提供程序以使用数据库中的特定表

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

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

并保留护照的默认登录行为

希望这可以帮助


推荐阅读