Задать вопрос
@Chesterfield25

Почему выдаёт ошибку?

Взял пример реализации api по jwt token из источника https://only-to-top.ru/blog/programming/2019-06-20...

Получаю ошибку в login.php

629723209ab81283124318.png

<?php
// заголовки 
header("Access-Control-Allow-Origin: https://xmonitoring.ru/");
header("Content-Type: application/json; charset=UTF-8");
header("Access-Control-Allow-Methods: POST");
header("Access-Control-Max-Age: 3600");
header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");
 
// здесь будет соединение с БД
// файлы необходимые для соединения с БД 
include_once 'config/database.php';
include_once 'objects/user.php';
 
// получаем соединение с базой данных 
$database = new Database();
$db = $database->getConnection();
 
// создание объекта 'User' 
$user = new User($db);
 
// получаем данные 
$data = json_decode(file_get_contents("php://input"));
 
// устанавливаем значения 
$user->email = $data->email;
$email_exists = $user->emailExists();
 
// подключение файлов jwt 
include_once 'config/core.php';
include_once 'libs/php-jwt-master/src/BeforeValidException.php';
include_once 'libs/php-jwt-master/src/ExpiredException.php';
include_once 'libs/php-jwt-master/src/SignatureInvalidException.php';
include_once 'libs/php-jwt-master/src/JWT.php';
use \Firebase\JWT\JWT;
 
// существует ли электронная почта и соответствует ли пароль тому, что находится в базе данных 
if ( $email_exists && password_verify($data->password, $user->password) ) {
 
    $token = array(
       "iss" => $iss,
       "aud" => $aud,
       "iat" => $iat,
       "nbf" => $nbf,
       "data" => array(
           "id" => $user->id,
           "firstname" => $user->firstname,
           "lastname" => $user->lastname,
           "email" => $user->email
       )
    );
 
    // код ответа 
    http_response_code(200);
 
    // создание jwt 
    $jwt = JWT::encode($token, $key);
    echo json_encode(
        array(
            "message" => "Успешный вход в систему.",
            "jwt" => $jwt
        )
    );
 
}
 
// Если электронная почта не существует или пароль не совпадает, 
// сообщим пользователю, что он не может войти в систему 
else {
 
  // код ответа 
  http_response_code(401);

  // сказать пользователю что войти не удалось 
  echo json_encode(array("message" => "Ошибка входа."));
}
?>
  • Вопрос задан
  • 150 просмотров
Подписаться 2 Простой Комментировать
Решения вопроса 1
Потому-что в методе encode ожидает 3 параметра (там у вас даже написано это). Перейдите в метод encode и посмотрите, чего не хватает. Обычно передается payload, secret key и algorithm.
$jwt = JWT::encode($payload, $key, 'HS256');
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы