在 auth0 中获取 accessToken
Get accessToken in auth0
我正在使用 auth0 和 nextJS.
我接下来要执行的操作:当用户添加他的凭据并登录时,他将被重定向到 callback
API.
这里
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);
}
}
所以我想在这个函数中获取令牌,以便能够在不同页面上重定向用户,但是如果我想在此处获取令牌,我会遇到问题:
The user does not have a valid session.
如果我删除与用户重定向的令牌相关的代码,但我需要在此处获取令牌才能进行用户检查。
我怎样才能在这个 callback
函数中获取令牌并实现我上面描述的目标?
使用 nextjs-auth0 library, you can access the identity token during the callback handler 的 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);
}
}
});
但是请记住,您通常应该 avoid looking inside the access token 由客户端应用程序。如果需要将用户信息转发给客户端,则应将其放在 id_token 中。访问令牌供 API 使用,您的客户端应用程序不应依赖其内容格式或语义,因为访问令牌在设计上没有定义格式。
export default async function callback(
req: NextApiRequest,
res: NextApiResponse
) {
try {
await auth0.handleCallback(req, res, {
async afterCallback(req, res, session, state) {
return session;
},
});
} catch (error) {
res.status(error.status || 500).end(error.message);
}
}
我正在使用 auth0 和 nextJS.
我接下来要执行的操作:当用户添加他的凭据并登录时,他将被重定向到 callback
API.
这里
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);
}
}
所以我想在这个函数中获取令牌,以便能够在不同页面上重定向用户,但是如果我想在此处获取令牌,我会遇到问题:
The user does not have a valid session.
如果我删除与用户重定向的令牌相关的代码,但我需要在此处获取令牌才能进行用户检查。
我怎样才能在这个 callback
函数中获取令牌并实现我上面描述的目标?
使用 nextjs-auth0 library, you can access the identity token during the callback handler 的 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);
}
}
});
但是请记住,您通常应该 avoid looking inside the access token 由客户端应用程序。如果需要将用户信息转发给客户端,则应将其放在 id_token 中。访问令牌供 API 使用,您的客户端应用程序不应依赖其内容格式或语义,因为访问令牌在设计上没有定义格式。
export default async function callback(
req: NextApiRequest,
res: NextApiResponse
) {
try {
await auth0.handleCallback(req, res, {
async afterCallback(req, res, session, state) {
return session;
},
});
} catch (error) {
res.status(error.status || 500).end(error.message);
}
}