Я пытаюсь сгенерировать токен, проверяя другие поля и таблицу, а не адрес электронной почты и пароль пользовательской таблицы. Я использую библиотеку tymon jwt.
У меня есть три поля, которые необходимо проверить для аутентификации пользователя
table::where(["id"=>"1","mobile"=>"123","otp"=>"asdf"])->get();
Итак, если я нашел строки, соответствующие этому условию в таблице, я хочу аутентифицировать пользователя и сгенерировать действительный токен с необходимыми утверждениями.
Что я пробовал до сих пор:
//after check for three fields in DB. If row matches then, $id and $contact are variable from DB.
$customClaims = ['id' => $id, 'mobile' => $contact];
$payload = JWTFactory::make($customClaims);
При попытке это получил JWT payload does not contain the required claims.
Итак, как аутентифицировать пользователя с тремя полями и сгенерировать действительный токен с необходимыми утверждениями и $customClaims.
public function verifyOTP(Request $request) {
$otp = $request->otp;
$schoolid = $request->schoolid;
$parent_contact = $request->contactNum;
$verifyOTP = OTP::where(['schoolid' => $schoolid, 'parent_numb' => $parent_contact, 'otp' => $otp])->get();
if ($verifyOTP) {
$customClaims = ['schoolid' => $schoolid, 'parent_numb' => $parent_contact];
$payload = JWTFactory::make($customClaims);
$token = JWTAuth::encode($payload);
return $token;
}
}
@ C2486 см. Полный код в отредактированном разделе.
Вы ищете \Tymon\JWTAuth\Facades\JWTAuth::fromUser($user, $customClaims = []), где $user - это какой-то объект с доступным полем id. Ошибка, которую вы здесь получили, заключается в том, что данные утверждения не содержат обязательных - 'iss', 'iat', 'exp', 'nbf', 'sub', 'jti'. Вы можете заполнить их вручную или воспользоваться данным способом.
@ GiedriusKiršys, почему бы тебе не написать ответ, если ты знаешь решение?






В этом случае Склеп станет настолько удобным, что я не знаю, хотите ли вы выполнить аутентификацию позже. Crypt поможет вам зашифровать и расшифровать.
Сделайте трейт или любой другой класс, вам не нужно сильно беспокоиться о шифровании и расшифровке, Crypt может позаботиться. Я построил Mobile API, используя Склеп
Зашифровать: Crypt :: encrypt ($ value);
Расшифровать: Crypt :: decrypt ($ значение);
Более подробная информация: https://laravel.com/docs/5.2/encryption
шифрование и дешифрование - это не только то, чем занимается JWT. JWT необходимо пройти аутентификацию на основе этих полей, а также проверить секретный ключ сервера.
Да. Как и в случае с разумным шифрованием, расшифровка и время жизни зависит от того, как вы хотите обрабатывать. Зависит от того, как вы это создаете или как вы это проектируете.
Это вообще ответ на поставленный выше вопрос? Как это решает проблему отсутствия заявлений в JWT?
Можете ли вы поделиться всем связанным кодом?