Аутентификация без проверки подлинности в Laravel JWT

#php #laravel

Вопрос:

Я использовал jwt-auth.

Он хорошо работает при входе в систему, но когда я пытаюсь зарегистрировать его и выполнить запрос на вход, произошла ошибка, приведенная ниже.

«сообщение»: «Не прошел проверку подлинности».

Вот исходный код:

config/auth.php

 'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],
    'api' => [
        'driver' => 'jwt',
        'provider' => 'users',
        'hash' => True,
    ],
 

routes/api.php:

 Route::group([    
    'middleware' => 'api',
    'namespace' => 'AppHttpControllers',//must include the path
    'prefix' => 'auth'
    
    ], function ($router) {
    
    Route::post('login', 'AuthController@login');
    Route::post('signup', 'AuthController@signup');

    Route::post('logout', 'AuthController@logout');
    Route::post('refresh', 'AuthController@refresh');
    Route::post('me', 'AuthController@me');
    
});
 

AuthController.php

     public function __construct()
    {
        $this->middleware('auth:api', ['except' => ['login,signup']]);
    }

    public function login()
    {
        $credentials = request(['email', 'password']);

        if (! $token = auth()->attempt($credentials)) {
            return response()->json(['error' => 'Unauthorized'], 401);
        }

        return $this->respondWithToken($token);
    }

    public function signup(Request $request){
        $validation = $request->validate([
            'email' =>'required',
            'name' =>'required',
            'password'=>'required|min:6|confirmed',
        ]);

        $data = array();
        $data['name'] = $request->name;
        $data['email'] = $request->email;
        $data['password'] = Hash::make($request->password);
        DB::table('users')->insert($data);
        return $this->login($request);     
       
    }
 

Я предоставил классы DB и Hash. В postman я помещаю маршрут в метод POST и устанавливаю заголовки Accept , а content-type в качестве application/json форматирования и в основной части я устанавливаю x-www-form и ввожу все ключи и значения с помощью ключа confirmation_password . Он не вставляется в базу данных и не показывает сообщение об ошибке. Я попробовал это, очистив кеш конфигурации и кеш маршрута. Я также попробовал это в формате raw и json.

Комментарии:

1. Вы уверены, что пользователь был сохранен в базе данных при регистрации?

2. Пользовательские данные не были сохранены в таблице users. Я пытаюсь зарегистрировать его с помощью post api

3. Пожалуйста, поделитесь столбцами таблицы вашего пользователя и проверьте файл журналов Laravel при регистрации

4. @enamulhaque Я бы посоветовал включить ведение журнала ошибок в вашем env-файле, после чего вы узнаете, какое промежуточное программное обеспечение вызвало ошибку аутентификации.

5. Схема::create(‘users’, функция (схема $table) { $table->id(); $table->string(‘name’); $table->string(’email’)->unique(); $table->timestamp(’email_verified_at’)-> nullable(); $table->string(‘пароль’); $table-> RememberToken(); $table-> timestamps(); Это столбец таблицы пользователя

Ответ №1:

я думаю, что у вас проблема с промежуточным программным обеспечением ur constractor, и вы не указали правильное значение except, которое вы должны использовать для разных значений except, подобных этому

         $this->middleware('auth:api', ['except' => ['login','signup']]);
 

Ответ №2:

Лучше использовать метод create или save для сохранения нового пользователя. После сохранения пользователя в вашей базе данных вы можете сгенерировать usertoken и отправить его обратно. И пользователь вошел в систему. Затем каждый дальнейший запрос регулируется с помощью токена.

         $token = // generate an new token with the JWT toker Helper method ;
        return response()->json([
            'status' => 'ok',
            'token' => $token,
            'user' => $user
        ], 201);
 

Комментарии:

1. @Mahmoud Hazem спасибо, это мне очень помогает

2. @enamulhaque С удовольствием! 😉 если это вам поможет, вы можете проголосовать или принять этот ответ.