11

I am using passport package for Laravel API Authentication. When I post data I get error:

401 Unauthorized","error":{"error":"Unauthenticated."}.

I use Auth::user()->id; to get current user id.

How to solve this error?

pirho
  • 11,565
  • 12
  • 43
  • 70
Karthik
  • 5,589
  • 18
  • 46
  • 78

6 Answers6

18

This code helped me:

auth()->guard('api')->user()

for shortline syntax you can use something like this:

auth('api')->user()
Gautam Patadiya
  • 1,401
  • 14
  • 19
7

The simplest format is auth('api')->user();

Rahul Reghunath
  • 1,210
  • 13
  • 23
1

You can get current user in laravel api using passport as below:

Route::get('/user', function (Request $request) {
 return $request->user(); 
});

but you are getting 401 Error that means either you are not passing access_token in Authorization header or your access_token has expired so you have to refresh the token,

You have to pass access_token in Authorization header which you have got after successfully logged in.

Your user route is protected by passport so When calling routes that are protected by Passport, your application's API consumers should specify their access token as a Bearer token in the Authorization header of their request.

For example, when using the Guzzle HTTP library you can pass it as below:

$response = $client->request('GET', '/api/logout', [
    'headers' => [
        'Accept' => 'application/json',
        'Authorization' => 'Bearer '.$accessToken,
    ],
]);

from the doc laravel passport passing access token

Haritsinh Gohil
  • 5,818
  • 48
  • 50
0

When you use Auth::user()->id in your function's body. You have not logged in before. Please call login api first to get token then set it to the next API call.

Tung Nguyen
  • 223
  • 3
  • 10
0

You need to follow a few steps and ensure they are all correct

  1. Follow all the setup instruction for Laravel Passport and ensure the backend side is working correctly
  2. When making your requests ensure you have passed a correct access token via the authorization header Authorization: Bearer xxx-token-here-xxx

Once you have confirmed the above is done correctly ensure your routes are protected by the api guard. If your routes are not protected then passport won't secure them

Below example using a group of routes

Route::group(['prefix' => 'v1',  'middleware' => 'auth:api'], function()
{
    Route::get("articles","ArticleController@read");
    Route::post("articles","ArticleController@create");
});
Evans M.
  • 1,791
  • 16
  • 20
0

Also you can use this:

    $user = Auth::guard('api')->user();
Ali
  • 47
  • 5