#laravel #postman #laravel-passport
Вопрос:
Следуя учебному пособию: https://www.twilio.com/blog/build-secure-api-php-laravel-passport Мне удалось установить Laravel/Passport для Api Laravel и приложения Vue.
Мне удалось создать attoken с помощью:
localhost:8000/oauth/token
получите логин, работающий в Postman:
localhost:8000/api/login?email=jennie05@example.comamp;password=password
Теперь, когда я пытаюсь зарегистрировать пользователя, я возвращаюсь на домашнюю страницу.
Я действительно получаю некоторые ошибки «неопределенного метода» из кода VS, но они отображаются в методе входа в систему, а не в методе регистрации failinf:
Вот контроллер:
<?php
namespace AppHttpControllersAPI;
use AppHttpControllersController;
use IlluminateHttpRequest;
use AppModelsUser;
class AuthController extends Controller
{
public function register(Request $request)
{
$validatedData = $request->validate([
'name' => 'required|max:55',
'email' => 'email|required|unique:users',
'password' => 'required|confirmed'
]);
$validatedData['password'] = bcrypt($request->password);
$user = User::create($validatedData);
$accessToken = $user->createToken('authToken')->accessToken;
return response([ 'user' => $user, 'access_token' => $accessToken]);
}
public function login(Request $request)
{
$loginData = $request->validate([
'email' => 'email|required',
'password' => 'required'
]);
if (!auth()->attempt($loginData)) {
return response(['message' => 'Invalid Credentials']);
}
$accessToken = auth()->user()->createToken('authToken')->accessToken;
return response(['user' => auth()->user(), 'access_token' => $accessToken]);
}
}
В этих маршрутах в api.php:
Route::post( 'register', 'AppHttpControllersAPIAuthController@register');
Route::post( 'login', 'AppHttpControllersAPIAuthController@login');
// Route::prefix('v2')->group(function(){ // prefix voor versie 2
Route::apiResource('/cards', 'AppHttpControllersCardController');
Route::apiResource('/games', 'AppHttpControllersGameController');
//Route::get('games', 'AppHttpControllersGameController@index')->middleware('auth:api');
//Route::post('games', 'AppHttpControllersGameController@store')->middleware('auth:api');
//Route::get('games/{id}', 'AppHttpControllersGameController@show')->middleware('auth:api');
//Route::put('games/{id}', 'AppHttpControllersGameController@update')->middleware('auth:api');
//Route::delete('games/{id}', 'AppHttpControllersGameController@destroy')->middleware('auth:api');
Route::get('/gameByPin/{pin}', 'AppHttpControllersGameController@searchPin');
Route::apiResource('/speler', 'AppHttpControllersSpelerController');
//});
Route::middleware('auth:api')->get('/user', function (Request $request) {
return $request->user();
});
есть ли кто-нибудь, кто может помочь в устранении этой проблемы?
Почтальон не выдает мне ошибок, просто перенаправляет на домашнюю страницу..
Комментарии:
1. Вы получаете какие-либо ошибки в своем laravel.log? И ваши заголовки при отправке запроса принимают ли они приложение/json?
2. Спасибо, что связались. В журнале laravel нет ошибок. Добавлен прием заявки/json, но отображается только информация о запросе: массив:3 [ «имя» => «дженнис» «электронная почта» =>> «snip@snap.nl» «пароль» =>>> «пароль» ] после того, как я ввел это как данные формы с дополнительным «паролем» = пароль, Может быть, я просто делаю что-то неправильно в postman? Записи также не добавляются в пользовательскую таблицу базы данных
3. Поэтому в своем вызове api попробуйте добавить следующий заголовок. «Принять»: «заявка/json»
4. Таким образом, ваш ответ возвращает вашего пользователя, но не маркер доступа? Вы добавили hasApiTokens в свою пользовательскую модель?
5. Итак, какую ошибку выдает vscode? И вы добавили Passport::routes() в свой AppServiceProvider? Вероятно, вы просто упускаете какой-то шаг. Вы можете проверить паспортную документацию здесь laravel.com/docs/8.x/passport#introduction
Ответ №1:
Вау, спасибо, Патрик, ты самый лучший.
Просто проверил все шаги в документации.
повторите команду установки, которую я выполнял при настройке всего. ( Видимо, нужно сделать это дважды ?!):
php artisan passport:install
Он вернулся:
Encryption keys already exist. Use the --force option to overwrite them.
Personal access client created successfully.
Client ID: 5
Client secret: ikJEfthxxxxxxxxxxxxxxxxxxxxxxxxxxxBjJ36
Password grant client created successfully.
Client ID: 6
Client secret: H42lpMxxxxxxxxxxxxxxxxxxxxxxxxxxxQGZgH
Теперь запрос на публикацию приводит к получению токена!
Ошибка VS Код показывает, что d для «использовать HasApiToken» является:
Undefined type 'LaravelPassportHasApiTokens'.intelephense(1009)