我在將令牌傳遞給會話回呼時遇到了一些困難。我的最終目標是將登錄用戶資料發送到客戶端。最初我只是發回用戶的電子郵件,但現在我希望將用戶的用戶名和姓名與電子郵件一起發送。通過遵循檔案,我們必須傳遞 JWT 和 Session 回呼,以便我們的開發人員能夠訪問令牌中的更多資料。目前,在我的 JWT 回呼中,我能夠記錄用戶資料,非常棒。然而,當我嘗試在 Session 回呼中記錄資料時,我得到一個空的 {}。非常感謝任何提示。先感謝您。
import NextAuth from "next-auth/next";
import CredentialsProvider from "next-auth/providers/credentials";
// Helper Functions
import {
connectToDatabase,
comparePasswords,
} from "../../helper/HelperFunctions";
export default NextAuth({
session: { jwt: true },
providers: [
CredentialsProvider({
async authorize(credentials) {
const client = await connectToDatabase();
const userCollection = client.db().collection("users");
const user = await userCollection.findOne({
email: credentials.email,
});
// const userInfo = {
// firstName: user.firstName,
// lastName: user.lastName,
// email: user.email,
// userName: user.userName,
// };
// console.log(userInfo);
if (!user) {
client.close();
throw new Error("No user found!");
}
const isValid = await comparePasswords(
credentials.password,
user.password
);
if (!isValid) {
client.close();
throw new Error("Invalid password");
}
client.close();
if (user) {
return {
user,
};
} else {
return null;
}
},
}),
],
callbacks: {
async jwt({ token, user }) {
// Persist the OAuth access_token to the token right after signin
if (user) {
token = user;
console.log(token);
// all of the user data is being logged, yet how to pass it down to session callback so i can use all the user data in the client?
}
return token;
},
},
async session({ session, token, user }) {
session.user = token;
console.log(session.user);
// nothing gets logged into the terminal?? WTF
return session;
},
});
uj5u.com熱心網友回復:
因為您正在使用:
import CredentialsProvider from "next-auth/providers/credentials";
那是next-auth v4。在新版本的 next-auth 中,此代碼不再有效:
session: { jwt: true },
相反,您應該使用
session: {
strategy: "jwt",
},
然后在jwt回呼中
// jwt callback is only called when token is created
async jwt({ token, user }) {
if (user) {
token = user;
// token = user;
token.user=user
}
return Promise.resolve(token);
},
然后在session回呼中:
session: async ({ session, token }) => {
// session callback is called whenever a session for that particular user is checked
// in above function we created token.user=user
session.user = token.user;
// you might return this in new version
return Promise.resolve(session)
},
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/465291.html
下一篇:讀取帶有空行的csv檔案
