4 글 보임 - 1 에서 4 까지 (총 4 중에서)
-
글쓴이글
-
2024년 1월 19일 12:58 #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", }, };
2024년 1월 19일 17:33 #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 비우라고 해놨습니다. 혹시 스토리지들을 비우게 한게 문제일까요?? 안비우면 예전로그인 했던 세션이 계속 남아있습니다ㅠ
-
글쓴이글
4 글 보임 - 1 에서 4 까지 (총 4 중에서)
- 답변은 로그인 후 가능합니다.