Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

82 строки
2.1 KiB

  1. import { AuthOptions, Session } from "next-auth";
  2. import CredentialsProvider from "next-auth/providers/credentials";
  3. import { LOGIN_API_PATH } from "./api";
  4. export interface SessionStaff {
  5. id: number;
  6. teamId: number;
  7. isTeamLead: boolean;
  8. employType: string | null;
  9. /**
  10. * The join date in milliseconds since epoch
  11. */
  12. joinDate: number | null;
  13. }
  14. export interface SessionWithTokens extends Session {
  15. staff?: SessionStaff;
  16. role?: string;
  17. abilities?: string[];
  18. accessToken?: string;
  19. refreshToken?: string;
  20. isTeamLead?: boolean;
  21. }
  22. export interface ability {
  23. actionSubjectCombo: string;
  24. }
  25. export const authOptions: AuthOptions = {
  26. debug: process.env.NODE_ENV === "development",
  27. providers: [
  28. CredentialsProvider({
  29. id: "credentials",
  30. name: "Credentials",
  31. credentials: {
  32. username: { label: "Username", type: "text" },
  33. password: { label: "Password", type: "password" },
  34. },
  35. async authorize(credentials, req) {
  36. const res = await fetch(LOGIN_API_PATH, {
  37. method: "POST",
  38. body: JSON.stringify(credentials),
  39. headers: { "Content-Type": "application/json" },
  40. });
  41. const user = await res.json();
  42. if (res.ok && user) {
  43. return user;
  44. }
  45. return null;
  46. },
  47. }),
  48. ],
  49. pages: {
  50. signIn: "/login",
  51. },
  52. callbacks: {
  53. jwt(params) {
  54. // Add the data from user to the token
  55. const { token, user } = params;
  56. const newToken = { ...token, ...user };
  57. return newToken;
  58. },
  59. session({ session, token }) {
  60. const sessionWithToken: SessionWithTokens = {
  61. ...session,
  62. role: token.role as string,
  63. // Add the data from the token to the session
  64. abilities: (token.abilities as ability[]).map(
  65. (item: ability) => item.actionSubjectCombo,
  66. ) as string[],
  67. accessToken: token.accessToken as string | undefined,
  68. refreshToken: token.refreshToken as string | undefined,
  69. staff: token.staff as SessionStaff,
  70. };
  71. // console.log(sessionWithToken)
  72. return sessionWithToken;
  73. },
  74. },
  75. };