토큰 만료 관련 질문입니다

문의를 남기실 경우 다음 항목을 작성해 주시면 빠른 답변 처리에 도움이 됩니다.

  • 프로젝트명 :
  • 뒤끝SDK 버전 : 4.5.0
  • 에러 코드 :

안녕하세요
커스텀 계정을 생성하고 로그인 후 하루 정도가 지나면 토큰이 만료되는 현상이있어서 질문드립니다

아래는 계정 생성에서 토큰 저장까지의 과정입니다

  1. LoginWithTheBackendTokenAsync 를 통해 로그인 시도
  2. LoginWithTheBackendTokenAsync 를 통한 로그인 시도 실패시 CustomSignUpAsync 을 통해 계정과 비밀번호 생성 이후 CustomLoginAsync 실행
  3. CustomLoginAsync 를 통해 커스텀 계정 로그인 성공시 Backend.BMember.SaveToken() 호출해서 토큰 저장
  4. 이후 게임 종료 후(어플 종료 후) 24시간 정도 지난뒤 게임 실행해서 LoginWithTheBackendTokenAsync 를 통해 로그인 시도하면 토큰이 만료됐는지 로그인을 하지못하고 다시 계정을 생성하게됩니다.
    그리고 24시간이 흐르기전에 LoginWithTheBackendTokenAsync 로 로그인에 성공하면 Backend.BMember.SaveToken() 호출해서 토큰을 저장하고있습니다

무엇이 문제인가요?

안녕하세요 개발자님

엑세스 토큰의 유효기간은 하루입니다.

아래 개발자 문서를 참고해주세요.

안녕하세요
음 제가 문의 한 내용은 그게아니라
LoginWithTheBackendTokenAsync 호출에 성공하면 액세스 토큰과 리프레쉬 토큰 2개를 모두 갱신 시켜주는것 아닌가요?

그럼 24시간이 지나 LoginWithTheBackendTokenAsync 를 다시 호출하면 엑세스 토큰이 유효하지않아도 리프레쉬 토큰이 있어서 로그인이 되어야하는거 아닌가요?

아래 다른 개발자 분이 문의한 내용에 뒤끝팀이 답변 달아주신내용입니다
아래 처럼 되지않고 있어서 문의 남겨요

안녕하세요 개발자님
LoginWithTheBackendTokenAsync() 함수의 경우
refreshToken이 유효한 상태일 경우 자동으로 accessToken을 갱신해주는 기능을 겸하고 있습니다.

accessToken이 만료된 상태에서 해당함수를 호출할 경우 refreshToken이 유효하다면 accessToken이 갱신되면서
로그인이 가능합니다.

저렇게 되지않고 “BadUnauthorizedException” “bad accessToken, 잘못된 accessToken 입니다” 401번 에러가 돌아옵니다

현재 엔진을 5.0.2 으로 버전을 올려서 사용중인데 동일한 증상으로 24시간이 지나면 LoginWithTheBackendToken 가 실패로 돌아옵니다

도움 부탁드립니다

안녕하세요 개발자님

어제 답글을 남겨주신 후에 서버 로그를 살펴보았는데요,

개발자님이 보내신 토큰 갱신요청에서 모두 엑세스토큰과 리프레시 토큰이 null값으로 들어오고 있어서 해당 현상이 발생하는 것 같습니다

엑세스토큰을 이용한 로그인 시도 중 내부에서 무언가 오류가 발생하여 로컬에 저장된 값이 삭제된 것으로 추정됩니다.

그리고 SDK 업데이트 이후에는 엑세스토큰 저장경로가 바뀌어 엑세스토큰 로그인 시도 시 해당 오류가 발생할 수 있습니다.

해결방안은

  1. Backend 폴더 자체를 완전삭제 (SDK 폴더 자체를 삭제해주세요)
  2. SDK 5.0.0 이상 버전으로 설치

이후 다시 커스텀 로그인 및 엑세스토큰 로그인을 시도해주세요.

또한 제일 처음 질문에 써주신 로직을 보면 엑세스토큰 로그인 시도 시 무조건 회원가입을 하도록 되어있는 것 같은데,

엑세스토큰 로그인 실패시에는
페더레이션 로그인 or 커스텀 로그인 or 커스텀 회원가입 중 하나를 선택하도록 로직을 작성하시면
해당 부분에 대한 고민도 해결되실 것 같습니다.

안녕하세요
안내 해주신 내용으로 진행해봤는데 여전히 24시간이 지나면 토큰이 없어지는지 안돼네요
아래는 SDK 5.0.2로 업데이트한 이후 로직입니다

  1. LoginWithTheBackendToken 시도
  2. LoginWithTheBackendToken 실패하면 GuestLogin 호출로 가입한뒤 게임 진행. 이후 종료 후 다시 게임 시작하면
  3. LoginWithTheBackendToken 시도 성공시 SaveToken 으로 토큰 저장하고 게임 진행

3번 과정에서 LoginWithTheBackendToken 의 콜백값 디버깅 해보면 엑세스 토큰, 리플레쉬 토큰 둘다 들어오는것 확인했습니다. 대체 뭐가 문제일까요? 확인하는데 24시간이라는 물리적인 시간이 필요해서 크게 차질을 보고있습니다 다시 한번 확인 부탁드리겠습니다

안녕하세요 개발자님

로그를 확인해보았는데 동일하게 엑세스토큰 값과 리프레시 토큰값이 null로 들어오고 있습니다

우선 SaveToken 함수의 경우 더이상 사용되지 않습니다 해당 함수를 삭제해주세요.
해당 부분때문에 문제가 생기는 것 같습니다.

엑세스토큰 관련해서는 아래 개발자문서를 확인해주세요.


두번째로 2번 토큰로그인 실패 시 게스트로그인으로 회원가입을 시도하는 건 굉장히 위험한 로직입니다.

토큰 로그인이 서버 장애 등으로 실패 한 경우에도 일반 유저들이 게스트 계정으로 가입되게 되기 때문입니다.

회원가입같은 것은 자동으로 하는 것이 아닌 반드시 유저에게 선택권을 주어야 합니다.

유저에게 선택권을 주지 않고 자동으로 회원가입을 하는 것 혹은 게스트 로그인만 제공하는 것은

애플 앱스토어에서는 리젝 사유입니다.
(회원가입이 존재하는 경우 애플에서는 반드시 애플 페더레이션 기능을 제공해야 합니다.)

안드로이드 플레이스토어에서는

게스트 로그인만 제공해도 무방하나 게스트로그인만 하게 된다면 어플 삭제 후 재설치 시 해당 유저는 다시 처음부터 시작해야 되는 상황이 발생하게 됩니다.

토큰 로그인이 실패했을 때의 로직은 위 글에서 제가 말씀드린 것처럼

토큰로그인 실패 시
페더레이션 로그인 or 커스텀 로그인 or 커스텀 회원가입 중 하나를 선택하도록 로직을 작성하시면
해당 부분에 대한 고민도 해결되실 것 같습니다.

안녕하세요
SaveToken을 호출하는 부분을 지워도 역시 24시간이 지나면 토큰 로그인이 안되네요
우선 말씀 주신것처럼

  1. Backend 폴더 자체를 완전삭제 (SDK 폴더 자체를 삭제해주세요)
  2. SDK 5.0.0 이상 버전으로 설치

위의 과정을 다 해봤는데 안되네요

24시간이 지나 LoginWithTheBackendToken 함수를 호출하면 아래와 같은 메세지가 리턴 됩니다

“statusCode : 401\nerrorCode : BadUnauthorizedException\nmessage : bad accessToken, 잘못된 accessToken 입니다\n”

윈도우 유니티 에디터에서 개발하고있으며 아래 로직을 첨부하겠습니다.

  1. 최초 계정 확인 ( 개발 편의상 유니티 에디터에서는 게스트 로그인 사용합니다. 말씀 주신것 처럼 LoginWithTheBackendToken 실패시 플랫폼에 맞춰 구글, 애플, 페이스북 로그인을 제공하고있습니다)

  2. 최초 계정 확인 실패하면 계정 생성 팝업 출력 (유니티 에디터에서는 게스트 로그인만 제공)

       public void LoginWithTheBackendToken()
         {
             Backend.BMember.LoginWithTheBackendToken(loginBro => 
             {
                 if (loginBro.IsSuccess())
                 {
                     // 뒤끝 토큰 로그인 성공
                     bro = loginBro;
                     isSuccess = true;
                 }
                 else
                 {
                     onLoginSatus?.Invoke(LoginStatus.SelectLoginChannel, null);
                 }
             });
         }
    
  3. 게스트 로그인 진행이후 게임 진행

     void GuestLogin()
         {
             Backend.BMember.GuestLogin(callback =>
             {
                 bro = callback;
                 isSuccess = callback.IsSuccess();
             });
         }
    

게임 종료후 24시간이 지난뒤 다시 LoginWithTheBackendToken 호출하면 성공 실패
“statusCode : 401\nerrorCode : BadUnauthorizedException\nmessage : bad accessToken, 잘못된 accessToken 입니다\n” 메세지 리턴

  public void LoginWithTheBackendToken()
    {
        Backend.BMember.LoginWithTheBackendToken(loginBro => 
        {
            if (loginBro.IsSuccess())
            {
                // 뒤끝 토큰 로그인 성공
                bro = loginBro;
                isSuccess = true;
            }
            else
            {
                onLoginSatus?.Invoke(LoginStatus.SelectLoginChannel, null);
            }
        });
    }

참고로 업데이트 함수에서는 리턴브로가 성공이면 다음 스텝으로 넘어가는 로직이있습니다

private void Update()
    {
        if (isSuccess)
        {
            isSuccess = false;
            bro.Clear();

            onLoginSatus?.Invoke(LoginStatus.TokenLoginSuccess, null);
        }
    
    }

아래 게스트 로그인 성공, 토큰 로그인 성공시 들어온 리턴값 드버깅한 이미지 첨부해드릴께요
문제가 무언가요?

[게스트 로그인 성공]

[ 24 시간이 지나기전 LoginWithTheBackendToken 성공]

안녕하세요 개발자님

우선 올려주신 사진의 경우 보안의 위험이 있어 임의로 삭제하였습니다

이 점 참고부탁드리겠습니다.

그리고 올려주신 자료 및 서버로그를

특정 환경과 특정 상황에서 엑세스 토큰 에러가 발생하는 것 같습니다

그래서 위에 말씀드린 것처럼 엑세스 토큰이 null 값으로 송수신 되는 것 같습니다

이 부분은 다음 업데이트 때 픽스하도록 하겠습니다.

이용에 불편을 드려 죄송합니다.

이번 엡뎃 내용에

  • [게임유저] 일부 실행환경에서 하루가 지나면 토큰로그인 시도 시 토큰로그인에 실패되는 현상이 픽스되었습니다.
    이게 들어가있네요 ~! 고맙습니다~!!!