如何解决API认证问题
我是第一次使用 laravel 创建 API,如果我提到任何不正确的地方,请原谅我并告诉我如何更正。
我已按照本文创建 API 身份验证,https://www.toptal.com/laravel/restful-laravel-api-tutorial
现在我可以注册用户并根据博客获得 api-token,但是当我尝试使用现有用户登录时,出现以下错误
"message": "Call to undefined method Illuminate\\Auth\\GenericUser::generateToken()","exception": "Error","file": "C:\\xampp\\htdocs\\myProject\\app\\Http\\Controllers\\Auth\\LoginController.php","line": 61,"trace": [
{
"file": "C:\\xampp\\htdocs\\myProject\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Controller.php","line": 54,"function": "login","class": "App\\Http\\Controllers\\Auth\\LoginController","type": "->"
},{
"file": "C:\\xampp\\htdocs\\myProject\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\ControllerDispatcher.php","line": 45,"function": "callAction","class": "Illuminate\\Routing\\Controller",{
"file": "C:\\xampp\\htdocs\\myProject\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Route.php","line": 254,"function": "dispatch","class": "Illuminate\\Routing\\ControllerDispatcher","line": 197,"function": "runController","class": "Illuminate\\Routing\\Route",{
"file": "C:\\xampp\\htdocs\\myProject\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Router.php","line": 693,"function": "run",{
"file": "C:\\xampp\\htdocs\\myProject\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php","line": 128,"function": "Illuminate\\Routing\\{closure}","class": "Illuminate\\Routing\\Router",{
"file": "C:\\xampp\\htdocs\\myProject\\app\\Http\\Middleware\\RedirectIfAuthenticated.php","line": 30,"function": "Illuminate\\Pipeline\\{closure}","class": "Illuminate\\Pipeline\\Pipeline","line": 167,"function": "handle","class": "App\\Http\\Middleware\\RedirectIfAuthenticated",{
"file": "C:\\xampp\\htdocs\\myProject\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Middleware\\SubstituteBindings.php","line": 50,"class": "Illuminate\\Routing\\Middleware\\SubstituteBindings",{
"file": "C:\\xampp\\htdocs\\myProject\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Middleware\\ThrottleRequests.php","line": 127,"line": 103,"function": "handleRequest","class": "Illuminate\\Routing\\Middleware\\ThrottleRequests","line": 55,"function": "handleRequestUsingNamedLimiter","line": 695,"function": "then","line": 670,"function": "runRouteWithinStack","line": 636,"function": "runRoute","line": 625,"function": "dispatchToRoute",{
"file": "C:\\xampp\\htdocs\\myProject\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Kernel.php","line": 166,"function": "Illuminate\\Foundation\\Http\\{closure}","class": "Illuminate\\Foundation\\Http\\Kernel",{
"file": "C:\\xampp\\htdocs\\myProject\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest.php","line": 21,"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",{
"file": "C:\\xampp\\htdocs\\myProject\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize.php","line": 27,"class": "Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize",{
"file": "C:\\xampp\\htdocs\\myProject\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance.php","line": 86,"class": "Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance",{
"file": "C:\\xampp\\htdocs\\myProject\\vendor\\fruitcake\\laravel-cors\\src\\HandleCors.php","line": 57,"class": "Fruitcake\\Cors\\HandleCors",{
"file": "C:\\xampp\\htdocs\\myProject\\vendor\\fideloper\\proxy\\src\\TrustProxies.php","class": "Fideloper\\Proxy\\TrustProxies","line": 141,"line": 110,"function": "sendRequestThroughRouter",{
"file": "C:\\xampp\\htdocs\\myProject\\public\\index.php","line": 52,{
"file": "C:\\xampp\\htdocs\\myProject\\server.php","function": "require_once"
}
]
}
注销时我也是同样的错误。
我正在附加我的登录控制器和 RegisterController,如果您需要更多详细信息并帮助我解决此问题,请告诉我
登录控制器.php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use App\Models\User;
use Illuminate\Foundation\Auth\RegistersUsers;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;
use App\Http\Controllers\Auth\RegisterController;
//use App\Http\Controllers\Auth\Request;
use Illuminate\Support\Facades\Auth;
//use Illuminate\Support\Facades\Auth;
class LoginController extends Controller
{
//use HasFactory,Notifiable;
/*
|--------------------------------------------------------------------------
| Login Controller
|--------------------------------------------------------------------------
|
| This controller handles authenticating users for the application and
| redirecting them to your home screen. The controller uses a trait
| to conveniently provide its functionality to your applications.
|
*/
use AuthenticatesUsers;
/**
* Where to redirect users after login.
*
* @var string
*/
protected $redirectTo = RouteServiceProvider::HOME;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest')->except('logout');
}
public function login(Request $request)
{
$this->validateLogin($request);
if ($this->attemptLogin($request)) {
$user = $this->guard()->user();
//$user = Auth::user();
//get user from db and return it to $user
$user->generateToken();
return response()->json([
'data' => $user->toArray(),]);
}
return $this->sendFailedLoginResponse($request);
}
public function logout(Request $request)
{
$user = Auth::guard('api')->user();
if ($user) {
$user->api_token = null;
$user->save();
}
return response()->json(['data' => $user + ': User logged out.'],200);
}
}
注册控制器.php
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use App\Models\User;
use Illuminate\Foundation\Auth\RegistersUsers;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use \Illuminate\Http\Request;
class RegisterController extends Controller
{
/*
|--------------------------------------------------------------------------
| Register Controller
|--------------------------------------------------------------------------
|
| This controller handles the registration of new users as well as their
| validation and creation. By default this controller uses a trait to
| provide this functionality without requiring any additional code.
|
*/
use RegistersUsers;
/**
* Where to redirect users after registration.
*
* @var string
*/
protected $redirectTo = RouteServiceProvider::HOME;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest');
}
/**
* Get a validator for an incoming registration request.
*
* @param array $data
* @return \Illuminate\Contracts\Validation\Validator
*/
protected function validator(array $data)
{
return Validator::make($data,[
'name' => ['required','string','max:255'],'email' => ['required','email','max:255','unique:users'],'password' => ['required','min:8','confirmed'],]);
}
/**
* Create a new user instance after a valid registration.
*
* @param array $data
* @return \App\Models\User
*/
protected function create(array $data)
{
return User::create([
'name' => $data['name'],'email' => $data['email'],'password' => Hash::make($data['password']),]);
}
protected function registered(Request $request,$user)
{
$user->generateToken();
return response()->json(['data' => $user->toArray()],201);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。