Skip to main content

Black Friday 2025! Only until December 1st: coupon FRIDAY25 for 40% off Yearly/Lifetime membership!

Read more here

PrijalBista/laravel-api-auth-sanctum-boilerplate

63 stars
3 code files
View PrijalBista/laravel-api-auth-sanctum-boilerplate on GitHub

app/Models/User.php

Open in GitHub
use Illuminate\Foundation\Auth\User as Authenticatable;
use Laravel\Sanctum\HasApiTokens;
 
class User extends Authenticatable
{
use HasApiTokens;
//
}

app/Http/Controllers/Api/Auth/AuthController.php

Open in GitHub
use Illuminate\Validation\ValidationException;
use Illuminate\Auth\Events\PasswordReset;
use Illuminate\Support\Facades\Password;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Hash;
use Illuminate\Http\Request;
use Illuminate\Support\Str;
use App\Models\User;
 
class AuthController extends Controller
{
public function signup(Request $request) {
$validatedData = $request->validate([
'name' => 'required|string|max:255',
'email' => 'required|email|unique:users,email',
'password' => 'required|min:6|confirmed',
]);
 
$validatedData['password'] = Hash::make($validatedData['password']);
 
if(User::create($validatedData)) {
return response()->json(null, 201);
}
 
return response()->json(null, 404);
}
 
public function login(Request $request) {
$request->validate([
'email' => 'required|email',
'password' => 'required',
]);
 
$user = User::where('email', $request->email)->first();
 
if (! $user || ! Hash::check($request->password, $user->password)) {
throw ValidationException::withMessages([
'email' => ['The provided credentials are incorrect.'],
]);
}
 
return response()->json([
'user' => $user,
'access_token' => $user->createToken($request->email)->plainTextToken
], 200);
}
 
public function logout(Request $request) {
 
// Revoke the token that was used to authenticate the current request
$request->user()->currentAccessToken()->delete();
//$request->user->tokens()->delete(); // use this to revoke all tokens (logout from all devices)
return response()->json(null, 200);
}
 
public function getAuthenticatedUser(Request $request) {
return $request->user();
}
 
public function sendPasswordResetLinkEmail(Request $request) {
$request->validate(['email' => 'required|email']);
 
$status = Password::sendResetLink(
$request->only('email')
);
 
if($status === Password::RESET_LINK_SENT) {
return response()->json(['message' => __($status)], 200);
} else {
throw ValidationException::withMessages([
'email' => __($status)
]);
}
}
 
public function resetPassword(Request $request) {
$request->validate([
'token' => 'required',
'email' => 'required|email',
'password' => 'required|min:8|confirmed',
]);
 
$status = Password::reset(
$request->only('email', 'password', 'password_confirmation', 'token'),
function ($user, $password) use ($request) {
$user->forceFill([
'password' => Hash::make($password)
])->setRememberToken(Str::random(60));
 
$user->save();
 
event(new PasswordReset($user));
}
);
 
if($status == Password::PASSWORD_RESET) {
return response()->json(['message' => __($status)], 200);
} else {
throw ValidationException::withMessages([
'email' => __($status)
]);
}
}
}

routes/api.php

Open in GitHub
use Illuminate\Support\Facades\Route;
 
Route::prefix('auth')->group(function () {
Route::post('signup', 'App\Http\Controllers\Api\Auth\AuthController@signup')->name('auth.signup');
Route::post('login', 'App\Http\Controllers\Api\Auth\AuthController@login')->name('auth.login');
Route::post('logout', 'App\Http\Controllers\Api\Auth\AuthController@logout')->middleware('auth:sanctum')->name('auth.logout');
Route::get('user', 'App\Http\Controllers\Api\Auth\AuthController@getAuthenticatedUser')->middleware('auth:sanctum')->name('auth.user');
 
Route::post('/password/email', 'App\Http\Controllers\Api\Auth\AuthController@sendPasswordResetLinkEmail')->middleware('throttle:5,1')->name('password.email');
Route::post('/password/reset', 'App\Http\Controllers\Api\Auth\AuthController@resetPassword')->name('password.reset');
});

We'd Love Your Feedback

Tell us what you like or what we can improve

Feel free to share anything you like or dislike about this page or the platform in general.