Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save thewebartisan7/c5aff61aee00878e2eb0e8c2a75ba989 to your computer and use it in GitHub Desktop.
Save thewebartisan7/c5aff61aee00878e2eb0e8c2a75ba989 to your computer and use it in GitHub Desktop.
Authenticate Token Controller Laravel Sanctum
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Illuminate\Validation\ValidationException;
use App\Models\User;
use App\Http\Resources\UserResource;
class AuthenticatedTokenController extends Controller
{
/**
* Handle an incoming authentication request.
*
* @param Request $request
* @return UserResource
* @throws ValidationException
*/
public function store(Request $request) : UserResource
{
$request->validate([
'email' => 'required|email',
'password' => 'required',
'device_name' => 'required',
]);
$user = User::where('email', $request->email)->first();
if (! $user || ! Hash::check($request->password, $user->password)) {
throw ValidationException::withMessages([
'email' => __('auth.failed'),
]);
}
return (new UserResource($user))
->additional(['meta' => [
'token' => $user->createToken($request->device_name)->plainTextToken,
'expiresIn' => config('sanctum.expiration') * 60, // in seconds
]]);
}
/**
* Revoke specific token or all.
*
* @param Request $request
* @return \Illuminate\Http\JsonResponse
* @throws ValidationException
*/
public function destroy(Request $request) : \Illuminate\Http\JsonResponse
{
$request->user()
->tokens()
->when($request->id, function ($query, $id) {
return $query->where('id', $id);
})
->delete();
return response()->json([], 204);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment