Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

parkmenen's avatar

Laravel accessing Auth:user() in API resource controller

Hi guys, I am using vue.js to return values to be saved through my recipient resource and I would like to save it along with my user_id using Auth::user()->id; Unfortunately I always get 0 in my user_id because I cannot access Auth::user()->id in my recipient controller :( any ideas ?

api.php

Auth::routes();

//list recipients Route::get('recipients', 'RecipientsController@index'); // list single recipient Route::get('recipient/{id}', 'RecipientsController@show'); //create recipient Route::post('recipient', 'RecipientsController@store'); //update recipient Route::put('recipient', 'RecipientsController@store'); //delete recipient Route::delete('recipient/{id}', 'RecipientsController@destroy');

RecipientsController.php

namespace App\Http\Controllers; use Illuminate\Support\Facades\Auth;

use Illuminate\Http\Request; use app\Http\Requests; use App\Recipient; use App\Http\Resources\Recipient as RecipientResource;

public function store(Request $request) { $recipient = $request->isMethod('put') ? Recipient::findOrFail($request->recipient_id) : new Recipient; $recipient->id = $request->input('recepient_id'); $recipient->firstName = $request->input('firstName'); $recipient->lastName = $request->input('lastName'); $recipient->mobile = $request->input('mobile'); $recipient->address_1 = $request->input('address_1'); $recipient->address_2 = $request->input('address_2'); $recipient->city = $request->input('city'); $recipient->state = $request->input('state'); $recipient->postcode = $request->input('postcode');

    if (Auth::check()) {
        $recipient->user_id = Auth::user()->id;
      } else {
        $recipient->user_id = 0;
      }
    
    if($recipient->save()) {
        return new RecipientResource($recipient);
    }
}
0 likes
1 reply
tykus's avatar
tykus
Best Answer
Level 104

You are doing nothing in api.php to authenticate your user. Maybe consider moving all of those routes in api.php into web.php so that your AJAX request from Vue can use the session (that I assume you have used to authenticate your user).

You can create an api route group in web.phpand set a prefix:

Route::prefix('api')->middleware('auth')->group(function () {}
    Route::get('recipients', 'RecipientsController@index');
    Route::get('recipient/{id}', 'RecipientsController@show');
    Route::post('recipient', 'RecipientsController@store');
    Route::put('recipient', 'RecipientsController@store');
    Route::delete('recipient/{id}', 'RecipientsController@destroy');
});
3 likes

Please or to participate in this conversation.