async def test_encode_new_token(self): """ Dado um objeto User e um Account, retorna um novo token JWT contendo as informações necessárias """ user = User(**USER_WITH_ONE_ACCOUNT_DICT) account = Account(**ACCOUNT_DEV_DICT) token = jwt_encode(user, account) decoded_token = jwt.decode(token, key=SECRET_KEY) self.assertDictEqual(user.dict(), decoded_token["user"]) self.assertDictEqual(account.dict(), decoded_token["current_account"])
def jwt_encode(user: User, account: Account) -> bytes: """ Encodes a new JWT Token https://tools.ietf.org/html/rfc7519#section-4.1.5 """ issued_at = datetime.utcnow() expiration_time = issued_at + timedelta(days=7) not_before = issued_at + timedelta(seconds=0) return jwt.encode( { "exp": expiration_time, "iat": issued_at, "nbf": not_before, "user": user.dict(), "current_account": account.dict(), }, SECRET_KEY, )