• 로그인
  • 장바구니에 상품이 없습니다.

home2 게시판 Next.js 게시판 session을 수정한 후 재로그인 안되는 문제

session을 수정한 후 재로그인 안되는 문제

4 글 보임 - 1 에서 4 까지 (총 4 중에서)
  • 글쓴이
  • #110719

    plmnko
    참가자
    선생님 드디어 회원정보를 수정한 후 세션 업데이트까지는 했는데, 그 이후에 로그아웃을 하고 다시 로그인을 하면 해당 계정으로 재로그인이 안됩니다ㅠㅠ
    현재 로그아웃을 해도 이전에 로그인했던 세션이 로컬스토리지랑 쿠키에 남아있는데 이것때문일까요??
    import NextAuth from "next-auth";
    import CredentialsProvider from "next-auth/providers/credentials";
    import axios from "axios";
    import { membersData } from "@/util/db_member";
    export const authOptions = {
      providers: [
        CredentialsProvider({
          credentials: {
            email: { label: "email", type: "email" },
            password: { label: "password", type: "password" },
          },
          authorize: async (credentials, req) => {
            const { email, password } = credentials;
            console.log("🚀 ~ authorize: ~ credentials:", credentials);
            try {
              // 서버에 인증 요청을 보냄
              const response = await axios.post(
                "https://server.bit-harbor.net/members/login",
                {
                  email,
                  password,
                }
              );
              const authorization = response.headers.get("authorization");
              const refresh = response.headers.get("refresh");
              // console.log("authorization : ", authorization);
              // console.log("refresh : ", refresh);
              let db = await membersData();
              let findUser = db.find(
                (member) => member.email === credentials.email
              );
              //console.log("findUser : ", findUser);
              if (!findUser) {
                console.log("해당 이메일은 없음");
                return null;
              }
              if (findUser) {
                const user = {
                  id: findUser.memberId,
                  name: findUser.userName,
                  userNickname: findUser.userNickname,
                  email: findUser.email,
                  memberId: findUser.memberId,
                  authorization: authorization,
                  refresh: refresh,
                };
                console.log("찾은회원", user);
                return user;
              } else {
                return null;
              }
            } catch (error) {
              console.error("로그인 오류:", error);
              return Promise.resolve(null);
            }
          },
        }),
      ],
      session: {
        strategy: "jwt",
        maxAge: 30 * 24 * 60 * 60, //30일
      },
      callbacks: {
        jwt: async ({ token, trigger, user, session }) => {
          if (user) {
            token.user = {};
            token.user.name = user.name;
            token.user.userNickname = user.userNickname;
            token.user.email = user.email;
            token.user.memberId = user.memberId;
            token.user.authorization = user.authorization;
            token.user.refresh = user.refresh;
          }
          // 조건문 에러 session 값은 userNickname, userName 프로퍼티만 존재함 name 프로퍼티 없음
          // if (trigger === "update" && session.name) {
          if (trigger === "update") {
            // 클라이언트에서 보낸 변경된 회원 정보를 세션에 반영
            token.user.userNickname = session.userNickname;
            token.user.userName = session.userName;
            console.log("회원", token);
            console.log("trigger", trigger);
            console.log("session", session);
          }
     
          return token;
        },
        session: async ({ session, token }) => {
          session.user = token.user;
          return session;
        },
      },
      secret: process.env.NEXTAUTH_SECRET,
      pages: {
        signIn: "/members",
      },
    };
    #110739

    codingapple
    키 마스터
    남아있어도 덮어써줄걸요 로그아웃이나 로그인 시키는 곳이 뭔가 이상한게 아닐까요
    #110775

    plmnko
    참가자
    import { signIn } from "next-auth/react";
    import Link from "next/link";
    function Login() {
      const handleSubmit = async (e) => {
        e.preventDefault();
        const email = e.target.email.value;
        const password = e.target.password.value;
        const result = await signIn("credentials", {
          email,
          password,
        });
        // if (result.error) {
        //   console.error(result.error);
        // }
      };
    로그인은 signIn함수로 email, password 보내고 있고 
    
    "use client";
    import { signOut, useSession } from "next-auth/react";
    import { useRouter } from "next/navigation";
    export default function LogoutBtn() {
      const { data: session, status } = useSession();
      const router = useRouter();
      return (
        <button
          className="login"
          onClick={() => {
            signOut({ callbackUrl: "/members" });
            console.log("로그아웃", session.user);
            sessionStorage.clear();
            localStorage.clear();
          }}
        >
          <span>로그아웃</span>
        </button>
      );
    }
    로그아웃은 signOut함수에 callbackUrl이랑 로그아웃 성공시 sessionStorage,localStorage 비우라고 해놨습니다.
    혹시 스토리지들을 비우게 한게 문제일까요?? 안비우면 예전로그인 했던 세션이 계속 남아있습니다ㅠ
    
     
    #110781

    codingapple
    키 마스터
    로컬스토리지 비우는건 상관없을걸요 
    쿠키만 새로 생성되면 로그인 잘된건데 확인해봅시다
4 글 보임 - 1 에서 4 까지 (총 4 중에서)
  • 답변은 로그인 후 가능합니다.

About

현재 월 700명 신규수강중입니다.

  (09:00~20:00) 빠른 상담은 카톡 플러스친구 코딩애플 (링크)
  admin@codingapple.com
  이용약관
ⓒ Codingapple, 강의 예제, 영상 복제 금지
top

© Codingapple, All rights reserved. 슈퍼로켓 에듀케이션 / 서울특별시 강동구 고덕로 19길 30 / 사업자등록번호 : 212-26-14752 온라인 교육학원업 / 통신판매업신고번호 : 제 2017-서울강동-0002 호 / 개인정보관리자 : 박종흠