#php #laravel #authentication #jwt
Вопрос:
я использую JWT для аутентификации API в laravel 8.
когда я использую auth()->
в своем контроллере , например , factory() или attemp() или что-то еще, laravel этого не знает и говорит :
Undefined method 'attempt'.intelephense(1013)
я не знаю, что я забыл включить
мой автоконтроллер :
namespace AppHttpControllersApiAdmin;
use AppModelsUser;
use IlluminateHttpRequest;
use AppHttpControllersController;
use IlluminateSupportFacadesValidator;
class AuthController extends Controller
{
public function __construct() {
$this->middleware('auth:api', ['except' => ['login', 'register']]);
}
public function login(Request $request){
$validator = Validator::make($request->all(), [
'email' => 'required|email',
'password' => 'required|string|min:6',
]);
if ($validator->fails()) {
return response()->json($validator->errors(), 422);
}
if (! $token = auth()->attempt($validator->validated())) {
return response()->json(['error' => 'Unauthorized'], 401);
}
return $this->createNewToken($token);
}
.
.
.
.
.
и мой config/auth.php файл :
return [
'defaults' => [
'guard' => 'api',
'passwords' => 'users',
],
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'jwt',
'provider' => 'users',
'hash' => false,
],
],
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => AppModelsUser::class,
],
// Following array is newly added to config
'otp-user' => [
'driver' => 'otp-based-auth-provider'
],
'passwords' => [
'users' => [
'provider' => 'users',
'table' => 'password_resets',
'expire' => 60,
'throttle' => 60,
],
],
'password_timeout' => 10800,
];
Ответ №1:
У Intelephense есть некоторые проблемы с некоторыми методами в Laravel. Вы можете либо игнорировать его, как это должно работать, либо вы можете назвать его:
JWTAuth::attempt($validator->validated)
Это должно устранить ошибку.