duocmmo / edu-comments

Quản lý các bình luận trên edu.duthanhduoc.com
https://edu.duthanhduoc.com/
0 stars 1 forks source link

https://edu.duthanhduoc.com/learn/Next.Js-Super?lessonId=520 #54

Open utterances-bot opened 2 months ago

utterances-bot commented 2 months ago

Khu vực học tập | Được Edu

Được chỉ cung cấp các khóa học lập trình online chất lượng, nói không với khóa lởm!

https://edu.duthanhduoc.com/learn/Next.Js-Super?lessonId=520

mycvlnn commented 2 months ago

Cái chỗ logic tại màn hình logout trong useEffect chỗ kia của anh thì nếu họ gõ /logout thì mình sẽ bị logout do a đang check là refreshToken && refreshToken !== getRefreshTokenFromLocalStorage() Nếu không có refreshToken thì nó sẽ pass và gọi hàm logout api

mycvlnn commented 2 months ago
"use client";

import { LOCAL_STORAGE } from "@/constants/local-storage";
import { getAccessTokenFromLocal, getRefreshTokenFromLocalStorage } from "@/lib/local-storage";
import { useLogoutMutation } from "@/queries/useAuth";
import { useRouter, useSearchParams } from "next/navigation";
import { useEffect } from "react";

const LogoutPage = () => {
    const { mutateAsync } = useLogoutMutation();
    const router = useRouter();
    const searchParams = useSearchParams();
    const refreshToken = searchParams.get(LOCAL_STORAGE.refreshToken);
    const accessToken = searchParams.get(LOCAL_STORAGE.accessToken);

    console.log({ refreshToken, accessToken });

    useEffect(() => {
        const idTimer = setTimeout(() => {
            if (
                (refreshToken && refreshToken === getRefreshTokenFromLocalStorage()) ||
                (accessToken && accessToken === getAccessTokenFromLocal())
            ) {
                // Xử lý call api logout
                mutateAsync().then(() => {
                    router.push("/login");
                });
            }
        }, 200);

        return () => {
            clearTimeout(idTimer);
        };
    }, [accessToken, mutateAsync, refreshToken, router]);

    return <div>Logout Page</div>;
};
export default LogoutPage;
duthanhduoc commented 2 months ago

Cái chỗ logic tại màn hình logout trong useEffect chỗ kia của anh thì nếu họ gõ /logout thì mình sẽ bị logout do a đang check là refreshToken && refreshToken !== getRefreshTokenFromLocalStorage() Nếu không có refreshToken thì nó sẽ pass và gọi hàm logout api

Đúng rồi, bug của anh!

Mọi người sửa lại đoạn điều kiện ntn nhé

  if (
      ref.current || !refreshTokenFromUrl || !accessTokenFromUrl ||
      (refreshTokenFromUrl &&
        refreshTokenFromUrl !== getRefreshTokenToLocalStorage()) ||
      (accessTokenFromUrl &&
        accessTokenFromUrl !== getAccessTokenFromLocalStorage())
    ) {
      return
    }
1canhhoa commented 2 months ago

Trường Hợp ở Client , khi cố ý sửa accessToken Trong cookies thì e thấy chưa có trường hợp đó tại sao vậy anh ?

duthanhduoc commented 2 months ago

Trường Hợp ở Client , khi cố ý sửa accessToken Trong cookies thì e thấy chưa có trường hợp đó tại sao vậy anh ?

Ai là người sửa được cookie, chỉ có người dùng sửa được thôi. Vậy nếu sửa ra đúng 1 cái access token chính xác thì cứ dùng bình thường. Giống như login facebook bằng cookie vậy em (nếu em chưa biết thì search gg sẽ thấy)

Còn nếu sửa sai thì cái access token nó k đúng, dẫn đến gọi API sẽ bị lỗi 401 và logout ra