Saj*_*ain 1 javascript authentication mern next.js next-auth
我正在使用下一个js。我正在使用 next-auth 进行身份验证。这是一个 MERN 堆栈项目。
问题:如何获取 jwt 令牌并使用 next-auth 和 axios 将其发送到我的后端。
(session.jwt) is giving me undefined.
Run Code Online (Sandbox Code Playgroud)
这是我的 nextauth.js 文件:
import NextAuth from 'next-auth';
import GoogleProvider from 'next-auth/providers/google';
import { MongoDBAdapter } from '@next-auth/mongodb-adapter';
import clientPromise from '../../../lib/mongodb';
export default NextAuth({
providers: [
GoogleProvider({
clientId: process.env.GOOGLE_CLIENT_ID,
clientSecret: process.env.GOOGLE_CLIENT_SECRET,
}),
],
callbacks: {
session: async ({ session, user }) => {
if (session?.user) {
session.user.id = user.id;
}
return session;
},
},
adapter: MongoDBAdapter(clientPromise),
secret: process.env.JWT_SECRET,
session: {
jwt: true,
maxAge: 30 * 24 * 60 * 60, // the session will last 30 days
},
});
Run Code Online (Sandbox Code Playgroud)
小智 6
他们文档中的示例将提供者(帐户)访问令牌保留在 jwt 回调中,然后将其包含到会话对象中:
callbacks: {
async jwt({ token, account }) {
if (account) {
token.accessToken = account.access_token;
}
return token;
},
async session({ session, token, user }) {
if (session?.user) {
session.user.id = user.id;
}
return {
...session,
accessToken: token.accessToken
};
},
}
Run Code Online (Sandbox Code Playgroud)
但是,如果您想要原始 JWT(而不是提供者访问令牌)并且您是服务器端,则可以使用getToken函数:
export async function getServerSideProps(context) {
const token = await getToken({ req: context.req, raw: true });
// ...
}
Run Code Online (Sandbox Code Playgroud)
然后在您的请求中使用它,例如在授权标头中):
const config = {
headers : {
'Authorization' : `Bearer ${token}`
}
}
axios.get('http://web.com/api', config);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6179 次 |
| 最近记录: |