I'm trying to create an API with Bearer Token but I can't figure it out:
route::middleware('auth:api')
doroute::middleware('auth:api')
So, I have the following code in my Routes\Api.php
file:
Route::get('/login', function (Request $request)
{
if(Auth::guard()->attempt(['email' => $request->email, 'password' => $request->password]) == FALSE)
return response()->json(['status' => FALSE]);
$user = Users::select('id', 'name', 'api_token', 'created_at')->where('email', $request->email)->firstOrFail();
return response()->json(['status' => TRUE, 'user' => $user]);
});
Route::middleware('auth:api')->get('/bookings', function (Request $request)
{
return response()->json(['its working!']);
});
I'm able to successfully connect to the route /login
and retrieve the api_token
. Now this token must be used in the /bookings
route in order to authenticate.
I was hopping the middleware('auth:api')
verify my CURL headers for the Authorization: Bearer zzzzzzzzz
, but its not working.
So basically I need to understand how do I change the code logic behind auth:api
or if I should create a new middleware and check for the request headers?
If you need custom code to handle authentication you should create your own middleware and authentication guard and use it instead of the default one that Laravel provides.
What does the
route::middleware('auth:api')
do
It states that the route should implement the middleware "auth" and the middleware group "api".
Where's the code of
route::middleware('auth:api')
All middleware in Laravel is defined in app/Http/Kernel.php
.
In there you will probably see something like
protected $middlewareGroups = [
....,
'api' => [
'throttle:60,1',
'bindings',
],
];
and
protected $routeMiddleware = [
...,
'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
];
This means that a route using the middleware auth:api
implements the api middleware group (in this case the ThrottleRequests
and SubstituteBinding
middleware) and the auth middleware (Authenticate
).
The actual authentication guard used depends on the configuration in your auth.php
config file:
'guards' => [
'api' => [
'driver' => 'token',
'provider' => 'users',
],
],
In the case above a TokenGuard is used (laravel/framework/src/Illuminate/Auth/TokenGuard.php
).
So to answer your question, the code for the auth middleware can be found at
laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With