Skip to content

Instantly share code, notes, and snippets.

@tomredman
Created November 22, 2020 00:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tomredman/703f9a237db9d4f6b31988714a8f5d36 to your computer and use it in GitHub Desktop.
Save tomredman/703f9a237db9d4f6b31988714a8f5d36 to your computer and use it in GitHub Desktop.
Simple Laravel Sanctum API auth controller for 3rd party/mobile register, login and logout
<?php
namespace App\Http\Controllers\Api;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Illuminate\Support\Facades\Auth;
use Illuminate\Auth\Events\Registered;
use App\Actions\Fortify\CreateNewUser;
use Illuminate\Validation\ValidationException;
use Laravel\Fortify\Contracts\RegisterResponse;
class AuthController extends Controller
{
/**
* Create a new registered user.
*
* @param \Illuminate\Http\Request $request
*/
public function register(Request $request)
{
$creator = new CreateNewUser;
$user = $creator->create($request->all());
event(new Registered($user));
$token = $user->createToken('API'); //or device name,client,etc
return response()->json(['token' => $token->plainTextToken]);
}
/**
* Handle an authentication attempt.
*
* @param \Illuminate\Http\Request $request
*
* @return Response
*/
public function login(Request $request)
{
$credentials = $request->only('email', 'password');
if (Auth::attempt($credentials)) {
$user = Auth::user();
$token = $user->createToken('token-name');
return response()->json(['token' => $token->plainTextToken]);
}
else {
throw ValidationException::withMessages([
'email' => ['The provided credentials are incorrect.'],
]);
}
}
/**
* Logout the current sessions
*
* @param \Illuminate\Http\Request $request
*
* @return Response
*/
public function logout(Request $request)
{
//Optionally destroy the current token
//Auth::user()->currentAccessToken()->delete();
Auth::logout();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment