Skip to content

Commit 44752bf

Browse files
author
Gareth Redfern
committed
add a token controller & endpoint
1 parent c588249 commit 44752bf

File tree

3 files changed

+48
-1
lines changed

3 files changed

+48
-1
lines changed
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
<?php
2+
3+
namespace App\Http\Controllers;
4+
5+
use App\Models\User;
6+
use Illuminate\Http\Request;
7+
use Illuminate\Http\Response;
8+
use Illuminate\Support\Facades\Hash;
9+
use Illuminate\Validation\ValidationException;
10+
11+
class TokenController extends Controller
12+
{
13+
/**
14+
* This controller provides a token for mobile devices
15+
* It can also be used to access the API via a GUI
16+
* Insomnia or Postman are two examples of GUI's
17+
*/
18+
public function __invoke(Request $request)
19+
{
20+
$request->validate([
21+
'email' => 'required|email',
22+
'password' => 'required',
23+
'device_name' => 'required',
24+
]);
25+
26+
$user = User::where('email', $request->email)->first();
27+
28+
if (!$user || !Hash::check($request->password, $user->password)) {
29+
throw ValidationException::withMessages([
30+
'email' => ['The provided credentials are incorrect.'],
31+
]);
32+
}
33+
34+
$token = $user->createToken($request->device_name)->plainTextToken;
35+
36+
return response()->json(['token' => $token], 200);
37+
}
38+
}

app/Models/User.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,11 @@
66
use Illuminate\Database\Eloquent\Factories\HasFactory;
77
use Illuminate\Foundation\Auth\User as Authenticatable;
88
use Illuminate\Notifications\Notifiable;
9+
use Laravel\Sanctum\HasApiTokens;
910

1011
class User extends Authenticatable implements MustVerifyEmail
1112
{
12-
use HasFactory, Notifiable;
13+
use HasApiTokens, HasFactory, Notifiable;
1314

1415
/**
1516
* The attributes that are mass assignable.

routes/api.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
use Illuminate\Http\Request;
44
use Illuminate\Support\Facades\Route;
5+
use App\Http\Controllers\TokenController;
6+
use App\Models\User;
57

68
/*
79
|--------------------------------------------------------------------------
@@ -14,10 +16,16 @@
1416
|
1517
*/
1618

19+
Route::post('/sanctum/token', TokenController::class);
20+
1721
Route::middleware('auth:sanctum')->get('/users/{user}', function (Request $request) {
1822
return $request->user();
1923
});
2024

25+
Route::middleware('auth:sanctum')->get('/users', function (Request $request) {
26+
return User::all();
27+
});
28+
2129
Route::middleware('auth:sanctum')->get('/users/auth', function (Request $request) {
2230
return auth()->user();
2331
});

0 commit comments

Comments
 (0)