Ahm*_*bai 4 reactjs next.js next-auth
next-auth我正在使用库控制下一个应用程序中的用户身份验证
我正在使用credentials provider. 首先,我调用返回用户信息的登录端点,然后获取访问令牌并将其放入由 给出的令牌内next-auth callback。
这是我的代码[...nextauth].js
const authOptions = {
session: {
strategy: "jwt",
},
providers: [
CredentialsProvider({
type: "credentials",
credentials: {},
async authorize(credentials, req) {
const { email, password } = credentials;
const result = await axios.post(
`http://127.0.0.1:5000/user/login`,
{
email,
password,
},
{
headers: { "Content-Type": "application/json" },
withCredentials: true,
}
);
return {
accessToken: result.data.accessToken,
};
},
}),
],
callbacks: {
async jwt({ user, token }) {
if (user?.accessToken) {
token.value = user.accessToken;
}
console.log(token); //<-- output below
return token;
},
},
};
Run Code Online (Sandbox Code Playgroud)
输出 :
{
value: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjYzOTZiMTlhYTczMmUzMzYwMjU2ZjBlMiIsImlhdCI6MTY3NTAyMzEwNSwiZXhwIjoxNjc1MTA5NTA1fQ.5kdPmeLCpwbJBjtzKMhe5QMNEx75ThiDKm75PN0vjoc',
iat: 1675023106,
exp: 1675109506,
jti: 'd9108700-1b5f-4bd3-8d31-0c36f38d9fcb'
}
Run Code Online (Sandbox Code Playgroud)
现在getServerSideProps我可以从请求中获取它,因为它是在 Cookie 中发送的
{
value: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjYzOTZiMTlhYTczMmUzMzYwMjU2ZjBlMiIsImlhdCI6MTY3NTAyMzEwNSwiZXhwIjoxNjc1MTA5NTA1fQ.5kdPmeLCpwbJBjtzKMhe5QMNEx75ThiDKm75PN0vjoc',
iat: 1675023106,
exp: 1675109506,
jti: 'd9108700-1b5f-4bd3-8d31-0c36f38d9fcb'
}
Run Code Online (Sandbox Code Playgroud)
我明白了:
eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIn0..6ryJ60GPcDLq9awg.4oWlJbecyWUnbZYJiv6z0eAuFmRFSfEn4fQSlh1FTjlPiiDGZASA4UwqXNEHRpRMG6HRPRDcsUUCHBBzaV8JwCEetgSYJcSrZ5CK _AhyvFKULKY-TpHSNDnmCI8ZS4y2nV_Xl0NqvMU3vA-D8gXtT5UcOrJLlN5dMe7S9xZo8vhr-gpohcEhKOefUgDjTmMYmBf190OLl0TY599FkJwpoeSFozAwavwbOZGQOxYVbsj3KTibsfE37juy qnDaiV_t59bWroGjz2d5kHLxfkpQB0IKYRnAH8sXbG7dDZUVLT1UQUN_FrjYpkFrQgxC7MmWZtCccQs-FsBXY7EbiYmJKIddpOeN1Q.1kas8bGE_O7IkEDiilxiZw
现在我想解密这个令牌以获得它的属性值(即accessToken)并使用它。
可以用javascript解密吗?感谢您的关注 !
你已经解析["next-auth.session-token"]自req.cookies. 那么现在。decode您可以使用from 的方法解密令牌next-auth/jwt以获取 JSON 负载。
import { decode } from 'next-auth/jwt';
Run Code Online (Sandbox Code Playgroud)
这是一个例子。
import { decode } from 'next-auth/jwt';
export async function getServerSideProps(context) {
const sessionToken = context.req.cookies['next-auth.session-token'];
const decoded = await decode({
token: sessionToken,
secret: process.env.NEXTAUTH_SECRET,
});
// decoded JSON will be like :
/**
* {
* name: 'John Doe',
* email: '...',
* image: '...'
* }
*/
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16096 次 |
| 最近记录: |