#php #laravel #oauth-2.0 #laravel-passport
#php #laravel #oauth-2.0 #laravel-passport
Вопрос:
Я работаю над приложением Laravel, которое требует генерации токена доступа для нескольких пользователей. Я использую Laravel Passport с предоставлением пароля для выдачи токена. Я следил за документацией Laravel, но, похоже, я делаю что-то не так, поскольку меня перенаправили на маршрут входа, когда я пытаюсь вызвать конечную точку моего API (Student) с помощью Postman. Позже я узнал, что перенаправление происходит из созданного мной промежуточного программного обеспечения, но я до сих пор не знаю, что пошло не так
auth.php
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'passport',
'provider' => 'users',
'hash' => false,
],
'api-student' => [
'driver' => 'passport',
'provider' => 'students',
'hash' => false,
]
];
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => AppUser::class,
],
'students' => [
'driver' => 'eloquent',
'model' => AppStudent::class,
],
],
api.php
Route::post('auth/getlogin', 'ApiStudentController@authenticate')->middleware('auth:api-student');
//ApiStudentController
public function authenticate(Request $request, Student $user)
{
$credentials = [
'username'=>$request->username,
'password'=>$request->password];
if(!Auth::guard('api-student')->attempt($credentials)) {
return response()->json([
'message'=>'Error'
], 401);
}
if(Auth::guard('api-student')->attempt($credentials)){
$user = Auth::guard('client');
$success['token'] = $user->createToken('MyApp')->accessToken;
return response()->json(['success' => $success], $this->successStatus);
}
else{
return response()->json(['error'=>'Username or password incorrect'], 401);
}
}
Комментарии:
1. добро пожаловать в SO .. какую ошибку вы получаете.?
2. Я перенаправляюсь на свой маршрут входа вместо того, чтобы получать токен доступа
3. добавьте заголовок
"Accept":"application/json"
, тогда он не будет перенаправлять4. Спасибо. Он больше не перенаправляет. Но я получаю {«сообщение»: «Не прошедший проверку подлинности».} после того, как я вызвал конечную точку
5. удалите промежуточное программное обеспечение отсюда
auth/getlogin
это должен быть общедоступный API, чтобы любой мог войти
Ответ №1:
удалить middleware
, чтобы любой мог войти
Route::post('auth/getlogin', 'ApiStudentController@authenticate')->middleware('auth:api-student');
Для
Route::post('auth/getlogin', 'ApiStudentController@authenticate');
вы применили middleware
здесь, поэтому перед выполнением каких-либо действий он проверяет маршрут, если auth
или нет
Комментарии:
1. Спасибо. Но теперь я получил «сообщение»: «Метод Illuminate \ Auth \ RequestGuard::attempt не существует.». Означает ли это, что я неправильно вызвал аутентификацию?
2. Метод attempt является частью,
SessionGuard
вы не можете использоватьPassport
просто сгенерировать токен и отправить.