Api用于使用sunctum的不同表格



我有三个表。1-客户2卖家3-石蜡

我对LARAVEL更新鲜,现在我正在学习LARAVEL8,所以我想用这些表中的令牌api登录。那么我该怎么做呢?请帮帮我,我找不到任何合适的解决方案。

我在config/auth.php 中添加了

'guards' => [
'admin' => [
'driver' => 'session',
'provider'   => 'admin',
],
'affilate' => [
'driver'  => 'session',
'provider' =>'affilate',
],
'customer' => [
'driver'  => 'session',
'provider' => 'customer',
],
'seller' => [
'driver'  => 'session',
'provider' => 'seller',
],
],
'providers' => [
'admin' => [
'driver' => 'eloquent',
'model' => AppModelsAdmin::class,
],
'customer' => [
'driver' => 'eloquent','model'=>AppModelsCustomer::class,
],
'seller' => [
'driver' => 'eloquent',
'model' =>AppModelsSeller::class,
],
'affilate' => [
'driver' => 'eloquent',
'model' =>AppModelsAffilate::class,
],
],

这是我为客户推出的第一款机型

<?php
namespace AppModels;
use LaravelSanctumHasApiTokens;
use IlluminateDatabaseEloquentModel;
use IlluminateNotificationsNotifiable;
use IlluminateDatabaseEloquentFactoriesHasFactory;
use IlluminateFoundationAuthUser as Authenticatable;
class Customer extends Authenticatable 
{
use HasFactory, HasApiTokens, Notifiable;
protected $table      = 'customer';
protected $primaryKey = 'id';
protected $fillable = [
'name', 'email', 'mobile', 'countryCode','email_verified_at', 
'email_verified','passWord','confirmPassword'
];
protected $hidden = [
'passWord', 'remember_token',
];
}

客户控制器

<?php
namespace AppHttpControllersAPI;
use CarbonCarbon;
use AppModelsCustomer;
use IlluminateHttpRequest;
use AppHttpControllersController;
use IlluminateSupportFacadesAuth;
use IlluminateSupportFacadesHash;
use IlluminateSupportFacadesValidator;
class CustomerController extends Controller
{    
public function customerLogin(Request $request)
{              
if (Auth::guard('customer')->attempt($credentials))
{
$registerCustomer                         =       Auth::Customer();
$token                                    =       $registerCustomer->createToken( $registerCustomer->name)->accessToken;
$success['success']                       =       true;
$success['message']                       =       "Success! you are logged in successfully";
$success['token']                         =       $token->plainTextToken;
$success['tokenExpiryTime']               =       2592000000; //converted 30days minutes in miliseconds
$success['customerName']                  =       $registerCustomer->name;
return response()->json(['success' => $success ], $this->successStatus);
}else {
return response()->json(['error'=>'Unauthorised'], 401);
}
}
public function registerCustomer(Request $request)
{
$validator              =  Validator::make($request->all(), [
'name'              => 'required|min:3|max:55',
'email'             => 'required|email|unique:customers',
'mobile'            => 'required|digits:10|unique:customers',
'countryCode'       => 'required|digits:6|unique:customers',
'passWord'          => 'required|alpha_num|min:8',
'confirmPassword'   => 'required|same:passWord|alpha_num|min:8',
]);
if($validator->fails())
{
return response()->json(['error'=>'Unprocessable Entity','validationErrors' => $validator->errors()], 422);
}
$customerData           =  array(
'name'              =>    $request->name,
'email'             =>    $request->email,
'mobile'            =>    $request->mobile,
'countryCode'       =>    $request->countryCode,
'passWord'          =>    Hash::make($request->passWord),
'confirmPassword'   =>    Hash::make($request->confirmPassword),
'email_verified'    =>    '0',
'email_verified_at' =>    Carbon::now(),
);
$saveCustomerData     =  Customer::create($customerData); 
return $this->customerLogin($request);  
}
}

这是我的路线

<?php
use IlluminateHttpRequest;
use IlluminateSupportFacadesRoute;
use AppHttpControllersApiCustomerController;
Route::post('/customer/register', [CustomerController::class, 
'registerCustomer']);
Route::post('/customer/login', [CustomerController::class, 
'customerLogin']);

我想知道我的错误在哪里——显示错误ErrorException: Undefined variable $credentials in file

谢谢拜托拜托拜托拜托帮帮我

当您告诉attempt()在您的中不起作用时,请尝试此手动方法

public function customerLogin(Request $request)
{
$customer = Customer::where('email', $request->email)->first();
if (!$customer) {
return response()->json(['error' => 'email not found'], 400);
}

if (Hash::check($request->email, $customer->password)) {
auth()->login($customer);
$registerCustomer                         =       Auth::user();
$token                                    =       $registerCustomer->createToken($registerCustomer->name)->accessToken;
$success['success']                       =       true;
$success['message']                       =       "Success! you are logged in successfully";
$success['token']                         =       $token->plainTextToken;
$success['tokenExpiryTime']               =       2592000000; //converted 30days minutes in miliseconds
$success['customerName']                  =       $registerCustomer->name;
return response()->json(['success' => $success], $this->successStatus);
} else {
return response()->json(['error' => 'Unauthorised'], 401);
}
}

最新更新