Laravel 带有 API 令牌的自定义 table

Laravel custom table with API token

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

查询后生成令牌

下面是登录代码...我可以成功地从数据库中检索到 id 但是如何 link 使用令牌来获取它?

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

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

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

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

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

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

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

希望对您有所帮助

// changes to be made in this file: config/auth.php

// Create a custom model to override the User model

'providers' => [

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

//custom provider
'customProvider' => [
    'driver' => 'eloquent',
    'model' => App\CustomModel::class, // put custom model here
],
],

// attach your custom provider within the api guard to use with api calls
'guards' => [
'web' => [
    'driver' => 'session',
    'provider' => 'users',
],

'api' => [
    'driver' => 'passport',
    'provider' => 'customProvider', // put custom provider here
],
],

// Use lik this in your api router
Route::group(['middleware' => 'auth:api'], function() {});

// I used it like this in LoginController

$user = CustomModel::where('email', $request -> email) -> first();

if(!Hash::check($request -> password, $user -> password)){
return response()->json(['message' => 'Authentication failed. Please check your 
credentials and try again!'], 401);
}

Auth::login($user);

$accessToken = Auth::user() -> createToken('authToken') -> accessToken;