Search code examples
laravelendpointlaravel-sanctumlaravel-api

GET /account: Returns API Token on response


When the user created a new account I added it's API token and returned it to the user. But I'm having trouble wanting to return the API token to the user when they view their account information.

GET /account: Returns API Token in response.

enter image description here

enter image description here

This is my code file User.php:

public function index()
{
    $users = User::where('id', auth()->user()->id)->get();

    return response([
        'data' => UserResource::collection($users),
        'message' => 'Retrieve successfully'
    ], 200);
}

// POST
public function store(Request $request)
{
    $data = $request->all();

    $validator = Validator::make($data, [
        'name' => 'required|max:255|string',
        'email' => 'required|email|unique:users,email',
        'password' => 'required|string',
    ]);

    if ($validator->fails()) {
        return response(['error' => $validator->errors(), 'Validation Error'], 400);
    }

    $users = User::create($data);

    $token = $users->createToken('accessToken')->plainTextToken;

    return response([
        'data' => new UserResource($users),
        'api_token' => $token,
        'message' => 'Created successfully'
    ], 201);
}

This is my code file api.php (route):

Route::group(['prefix' => 'v1' ], function () {

    // Account
    Route::post('/account', [UserController::class, 'store']);

    // Protected route
    Route::group(['middleware' => ['auth:sanctum']], function () {

            // Account
            Route::get('/account', [UserController::class, 'index']);
    });
});

Solution

  • Use $request->bearerToken() to get bearer token.

    public function index()
    {
        $users = User::where('id', auth()->user()->id)->get();
    
        return response([
            'data' => UserResource::collection($users),
            'api_token' => $request->bearerToken(),
            'message' => 'Retrieve successfully'
        ], 200);
    }