简体   繁体   中英

'ERROR_MALFORMED_TOKEN' in next.js with Graphql using hasura

This is my code in login api in next.js: Login.js file -

import { magicAdmin } from "../../lib/magic";
import jwt from "jsonwebtoken";

export default async function login(req, res) {
if (req.method === "POST") {
 try {
   const auth = req.headers.authorization;
   const didToken = auth ? auth.substr(7) : "";
   console.log({ didToken });
   const metadata = await magicAdmin.users.getMetadataByToken(didToken);
   console.log({ metadata });
   const token = jwt.sign(
     {
       ...metadata,
       iat: Math.floor(Date.now() / 1000),
       exp: Math.floor(Date.now() / 1000 + 7 * 24 * 60 * 60),
       "https://hasura.io/jwt/claims": {
         "x-hasura-allowed-roles": ["user", "admin"],
         "x-hasura-default-role": "user",
         "x-hasura-user-id": `${metadata.issuer}`,
       },
     },
     "thisisasecretthisisasecret4445822"
   );
   console.log("generate", token);
   res.send({ done: true });
 } catch (error) {
   console.error(error);
   res.status(500).send({ done: false });
 }
} else {
 res.send({ done: false });
}
}

when i send POST request using thunderclient it is giving me this error:

{ didToken: 'token1' }
MagicAdminSDKError: Magic Admin SDK Error: [ERROR_MALFORMED_TOKEN] The DID token is malformed or failed to parse.
    at new MagicAdminSDKError (/home/jinalkhatri/Documents/Next Tutorials/netflix/node_modules/@magic-sdk/admin/dist/core/sdk-exceptions.js:22:28)
    at Object.createMalformedTokenError (/home/jinalkhatri/Documents/Next Tutorials/netflix/node_modules/@magic-sdk/admin/dist/core/sdk-exceptions.js:54:12)
    at Object.parseDIDToken (/home/jinalkhatri/Documents/Next Tutorials/netflix/node_modules/@magic-sdk/admin/dist/utils/parse-didt.js:33:32)
    at TokenModule.decode (/home/jinalkhatri/Documents/Next Tutorials/netflix/node_modules/@magic-sdk/admin/dist/modules/token/index.js:86:40)
    at TokenModule.getIssuer (/home/jinalkhatri/Documents/Next Tutorials/netflix/node_modules/@magic-sdk/admin/dist/modules/token/index.js:95:21)
    at UsersModule.<anonymous> (/home/jinalkhatri/Documents/Next Tutorials/netflix/node_modules/@magic-sdk/admin/dist/modules/users/index.js:137:41)
    at step (/home/jinalkhatri/Documents/Next Tutorials/netflix/node_modules/@magic-sdk/admin/dist/modules/users/index.js:46:23)
    at Object.next (/home/jinalkhatri/Documents/Next Tutorials/netflix/node_modules/@magic-sdk/admin/dist/modules/users/index.js:27:53)
    at /home/jinalkhatri/Documents/Next Tutorials/netflix/node_modules/@magic-sdk/admin/dist/modules/users/index.js:21:71
    at new Promise (<anonymous>) {
  code: 'ERROR_MALFORMED_TOKEN',
  data: []
}

i have added this as token in Bearer token field of Thunderclient: token12wert

This is magic.js file:

import { Magic } from "@magic-sdk/admin";
export const magicAdmin = new Magic(process.env.NEXT_PUBLIC_MAGIC_SERVER_KEY);

The Bearer token which i was passing in the Thunderclient was wrong.

This is how i got the correct token:

import { magic } from "../../lib/magic-client";

const didToken = await magic.user.getIdToken();
console.log({didtoken});

and then passed this into the Thunderclient as Bearer Token, and it solved the issue.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM