geo/frontend/lib/auth.ts

56 lines
1.4 KiB
TypeScript

import { NextAuthOptions } from "next-auth";
import CredentialsProvider from "next-auth/providers/credentials";
import { api } from "@/lib/api";
export const authOptions: NextAuthOptions = {
providers: [
CredentialsProvider({
name: "credentials",
credentials: {
email: { label: "邮箱", type: "email" },
password: { label: "密码", type: "password" },
},
async authorize(credentials) {
if (!credentials?.email || !credentials?.password) return null;
try {
const res = await api.auth.login({
email: credentials.email,
password: credentials.password,
});
if (res.access_token) {
return {
id: res.user?.id || credentials.email,
name: res.user?.name,
email: res.user?.email,
accessToken: res.access_token,
};
}
return null;
} catch {
return null;
}
},
}),
],
session: {
strategy: "jwt",
},
callbacks: {
async jwt({ token, user }) {
if (user) {
token.accessToken = user.accessToken;
token.id = user.id;
}
return token;
},
async session({ session, token }) {
session.accessToken = token.accessToken as string;
session.user.id = token.id as string;
return session;
},
},
pages: {
signIn: "/login",
},
};