hello all,
I'm building an admin panel and APIs for a Mobile App.
For the admin panel, I used the default User model to Auth Web ( users who will manage the admin panel, with roles and permissions) and gates to authorize.
For the APIs, I wanna use 2 models (MobileUser, StoreUser)
My questions are as follow:
What is the proper way to authenticate/issue tokens for Both models using sanctum?
-Is it just like add (in both models):
use Laravel\Sanctum\HasApiTokens;
use HasApiTokens; //as a treat
-Or I should add more like (in both models):
use Iluminate\Contract\Auth\Authinticatable as AuthinticatableContract;
use Iluminate\Auth\Authinticatable;
use Laravel\Sanctum\HasApiTokens;
Class MobileUser extends Model implements AuthinticatableContract
//Class StoreUser extends Model implements AuthinticatableContract
{
use HasApiTokens, Authinticatable;
-Should I add MobileUser and StoreUser as providers in config/auth.php?
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\Models\User::class,
],
'mobileusers' => [
'driver' => 'eloquent',
'model' => App\Models\MobileUser::class,
],
'storeusers' => [
'driver' => 'eloquent',
'model' => App\Models\StoreUser::class,
],
],
-and guards in config/auth.php as follow
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'mobileusers','storeusers',
'hash' => true,
],
],
**this is the Api/AuthController for MobileUser **
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Models\MobileUser;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Illuminate\Validation\ValidationException;
class AuthController extends Controller
{
public function register(Request $request)
{
$request->validate([
'username' => 'required|min:3',
'email' => 'required|email',
'password' => 'required|min:6',
'first_name' => 'required',
'last_name' => 'required',
'phone_number' => 'required',
]);
$user = MobileUser::create([
'username' => $request->username,
'email' => $request->email,
'password' => bcrypt($request->password),
'first_name' => $request->first_name,
'last_name' => $request->last_name,
'phone_number' => $request->phone_number,
]);
return response()->json($user);
}
public function login(Request $request)
{
$request->validate([
'email' => 'email|required',
'password' => 'required'
]);
$user = MobileUser::where('email', $request->email)->first();
if (! $user || ! Hash::check($request->password, $user->password)) {
throw ValidationException::withMessages([
'email' => ['The provided credentials are incorrect.'],
]);
}
$authToken = $user->createToken($request->email)->plainTextToken;
return response()->json([
'access_token' => $authToken,
]);
}
}
and the Sanctum configurations was a bit confused https://laravel.com/docs/8.x/sanctum#configuration
Thanks in advance