#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 С удовольствием! 😉 если это вам поможет, вы можете проголосовать или принять этот ответ.