在 auth0 中获取 accessToken

IT技术 javascript reactjs next.js auth0
2021-04-06 15:02:58

我正在使用auth0nextJS

我想下一步:当用户添加他的凭据并登录时,他将被重定向到callbackAPI。

和这里

    import auth0 from '../../utils/auth0';

    export default async function callback(req, res) {
      try {
        await auth0.handleCallback(req, res, {
          redirectTo: '/'
        });
      } catch (error) {
        console.error(error);
        res.status(error.status || 400).end(error.message);
      }
    }

我想根据令牌重定向用户。
解码令牌如果应用程序是简单的用户或管理员,我将获取数据。

如果他是管理员,他应该被重定向到管理页面,如果不是用户页面。

所以我做了这样的事情:

    import auth0 from '../../utils/auth0';

    export default async function callback(req, res) {
       const tokenCache = auth0.tokenCache(req, res);
       const { accessToken } = await tokenCache.getAccessToken();
       console.log(accessToken) 
      try {
        await auth0.handleCallback(req, res, { redirectTo: '/' });
      } catch (error) {
        console.error(error);
        res.status(error.status || 400).end(error.message);
      }
    }

所以我想在这个函数中获取令牌,以便能够在不同页面上重定向用户,但是如果我想在这里获取令牌,我会遇到问题:

用户没有有效的会话。

如果我删除与令牌相关的代码,用户将被重定向,但我需要在此处获取令牌才能进行用户检查。

我怎样才能在这个callback函数中获取令牌并实现我上面描述的?

1个回答

使用nextjs-auth0库的v1.2.0 ,您可以在回调处理程序期间访问身份令牌

import { handleAuth, handleLogin, handleCallback } from '@auth0/nextjs-auth0';

const afterCallback = (req, res, session, state) => {
    console.log(session.idToken);
    if (!session.user.isAdmin) {
        throw new UnauthorizedError('User is not admin');
    }
    return session;
}

export default handleAuth({
    async callback(req, res) {
        try {
            await handleCallback(req, res, { afterCallback });
        } catch (error) {
            res.status(error.status || 500).end(error.message);
        }
    }
});

会话变量 afterCallback

但是,请记住,您通常应该避免通过客户端应用程序查看访问令牌内部如果您需要将用户信息中继到客户端,则应将其放在 id_token 中。访问令牌供 API 使用,您的客户端应用程序不应依赖其内容格式或语义,因为访问令牌的设计没有定义格式。