mirror of
https://github.com/woodchen-ink/Q58Connect.git
synced 2025-07-19 14:31:56 +08:00
feat: Enhance NextAuth session management with extended session duration and dynamic token updates
This commit is contained in:
parent
efc5dd6b39
commit
cd62f1589f
23
src/auth.ts
23
src/auth.ts
@ -7,7 +7,11 @@ import { prisma } from "./lib/prisma";
|
|||||||
|
|
||||||
export const { handlers, auth, signIn, signOut } = NextAuth({
|
export const { handlers, auth, signIn, signOut } = NextAuth({
|
||||||
adapter: PrismaAdapter(prisma),
|
adapter: PrismaAdapter(prisma),
|
||||||
session: { strategy: "jwt" },
|
session: {
|
||||||
|
strategy: "jwt",
|
||||||
|
maxAge: 30 * 24 * 60 * 60, // 30 days
|
||||||
|
updateAge: 24 * 60 * 60, // 24 hours
|
||||||
|
},
|
||||||
pages: {
|
pages: {
|
||||||
signIn: "/sign-in",
|
signIn: "/sign-in",
|
||||||
},
|
},
|
||||||
@ -42,7 +46,22 @@ export const { handlers, auth, signIn, signOut } = NextAuth({
|
|||||||
session.user.name = token.name;
|
session.user.name = token.name;
|
||||||
return session;
|
return session;
|
||||||
},
|
},
|
||||||
async jwt({ token }) {
|
async jwt({ token, user, trigger, session }) {
|
||||||
|
if (trigger === "update" && session) {
|
||||||
|
// 当收到更新触发时,重新获取用户信息
|
||||||
|
const dbUser = await getUserById(token.sub!);
|
||||||
|
if (dbUser) {
|
||||||
|
token.username = dbUser.username;
|
||||||
|
token.email = dbUser.email;
|
||||||
|
token.picture = dbUser.avatarUrl;
|
||||||
|
token.name = dbUser.name;
|
||||||
|
token.role = dbUser.role;
|
||||||
|
token.moderator = dbUser.moderator;
|
||||||
|
token.groups = dbUser.groups;
|
||||||
|
}
|
||||||
|
return token;
|
||||||
|
}
|
||||||
|
|
||||||
if (!token.sub) return token;
|
if (!token.sub) return token;
|
||||||
|
|
||||||
const dbUser = await getUserById(token.sub);
|
const dbUser = await getUserById(token.sub);
|
||||||
|
@ -21,18 +21,11 @@ import { ThemeToggle } from "../theme-toggle";
|
|||||||
import { Button } from "../ui/button";
|
import { Button } from "../ui/button";
|
||||||
|
|
||||||
export function NavBar() {
|
export function NavBar() {
|
||||||
const { data: session, status, update } = useSession();
|
const { data: session, status } = useSession();
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const pathname = usePathname();
|
const pathname = usePathname();
|
||||||
const user = session?.user;
|
const user = session?.user;
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
// 当路由变化时,尝试更新 session
|
|
||||||
if (pathname === "/dashboard" || pathname.startsWith("/dashboard/")) {
|
|
||||||
update();
|
|
||||||
}
|
|
||||||
}, [pathname, update]);
|
|
||||||
|
|
||||||
const handleSignOut = async () => {
|
const handleSignOut = async () => {
|
||||||
await signOut({ redirect: false });
|
await signOut({ redirect: false });
|
||||||
router.refresh();
|
router.refresh();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user