Как я могу получить api/зарегистрироваться с паспортом в laravel?

#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)