Skip to content

Commit 06996f1

Browse files
committed
refractor(auth): implement logout API and tokenized auth using sanctum
1 parent 31c325d commit 06996f1

3 files changed

Lines changed: 42 additions & 18 deletions

File tree

app/Http/Controllers/Api/AuthController.php

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
use Illuminate\Http\Request;
77
use App\Models\User;
88
use Illuminate\Support\Facades\Hash;
9+
use Illuminate\Support\Facades\Auth;
910

1011
class AuthController extends Controller
1112
{
@@ -26,34 +27,48 @@ public function register(Request $request)
2627
'user_type' => $request->user_type,
2728
]);
2829

30+
$token = $user->createToken('mobile-token')->plainTextToken;
31+
2932
return response()->json([
3033
'success' => true,
3134
'user' => $user,
32-
'token' => 'demo_token_' . $user->id
35+
'token' => $token
3336
]);
3437
}
3538

3639
// LOGIN
3740
public function login(Request $request)
3841
{
39-
$request->validate([
42+
$credentials = $request->validate([
4043
'email' => 'required|email',
4144
'password' => 'required'
4245
]);
4346

44-
$user = User::where('email', $request->email)->first();
47+
if (!Auth::attempt($credentials)) {
48+
return response()->json(['message' => 'Invalid credentials'], 401);
49+
}
50+
51+
$user = Auth::user();
52+
$token = $user->createToken('mobile-token')->plainTextToken;
4553

46-
if (!$user || !Hash::check($request->password, $user->password)) {
47-
return response()->json([
48-
'success' => false,
49-
'message' => 'Invalid credentials'
50-
], 401);
54+
return response()->json([
55+
'user' => $user,
56+
'token' => $token
57+
]);
58+
}
59+
60+
public function logout(Request $request)
61+
{
62+
// Revoke the current access token
63+
if ($request->user()->currentAccessToken()) {
64+
$request->user()->currentAccessToken()->delete();
5165
}
5266

5367
return response()->json([
5468
'success' => true,
55-
'user' => $user,
56-
'token' => 'demo_token_' . $user->id
69+
'message' => 'Logged out successfully'
5770
]);
5871
}
72+
73+
5974
}

app/Models/User.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,12 @@
88
use Illuminate\Notifications\Notifiable;
99
use Illuminate\Support\Str;
1010
use Laravel\Fortify\TwoFactorAuthenticatable;
11+
use Laravel\Sanctum\HasApiTokens;
1112

1213
class User extends Authenticatable
1314
{
14-
/** @use HasFactory<\Database\Factories\UserFactory> */
15-
use HasFactory, Notifiable, TwoFactorAuthenticatable;
15+
use HasApiTokens, HasFactory, Notifiable;
16+
1617

1718
/**
1819
* The attributes that are mass assignable.

routes/api.php

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,22 @@
1111
use App\Http\Controllers\Api\JobController;
1212
use App\Http\Controllers\Api\AuthController;
1313

14-
// LIST JOBS
15-
Route::get('/jobs', [JobController::class, 'index']);
14+
Route::middleware('auth:sanctum')->group(function () {
15+
// LIST JOBS
16+
Route::get('/jobs', [JobController::class, 'index']);
1617

17-
// CREATE JOB
18-
Route::post('/jobs', [JobController::class, 'store']);
18+
// CREATE JOB
19+
Route::post('/jobs', [JobController::class, 'store']);
1920

20-
// APPLY TO JOB
21-
Route::post('/jobs/{id}/apply', [JobController::class, 'apply']);
21+
// APPLY TO JOB
22+
Route::post('/jobs/{id}/apply', [JobController::class, 'apply']);
23+
24+
// GET AUTHENTICATED USER
25+
Route::get('/me', fn (Request $req) => $req->user());
26+
27+
// LOGOUT
28+
Route::post('/logout', [AuthController::class, 'logout']);
29+
});
2230

2331
// AUTH ROUTES
2432
Route::post('/register', [AuthController::class, 'register']);

0 commit comments

Comments
 (0)