• 카테고리

    질문 & 답변
  • 세부 분야

    모바일 앱 개발

  • 해결 여부

    해결됨

토큰을 하드코딩해서 임시로 사용하려고 하는데 안되네요 ㅠㅠ

24.01.26 18:12 작성 24.01.28 17:57 수정 조회수 142

0

결론적으로 JWT토큰도 서버측 페이지(예, index.php)에 하드코딩해서 클라인언트 앱으로 전송할 수 있네요...

 

문제의 핵심은 제가 임시로 구축한 서버(아파치 웹서버)로 요청하는 주소 끝에 정확한 페이지 주소를 붙이든(예,http://제 도메인 주소/auth/token/index.php) 아니면 http://제 도메인 주소/auth/token/와 같은식으로 끝에 "/"는 꼭 붙여야지 응답을 받을 수 있는데, 제가 강의를 따라서 그대로 요청하는 주소를 아래와 같이 끝에 "/"를 붙이지 않고 Dio 요청을 했기 때문에 생기는 문제였습니다.

http://제 도메인 주소/auth/token

http://제 도메인 주소/auth/login

 

여전히 POSTMAN으로 요청을 테스트해보면, POSTMAN에서는 요청하는 주소 끝에 "/"붙이지 않더라도

정상적으로 응답을 받을 수 있는데, 왜 Dio로 요청했을 때는 응답을 받을 수가 없는지는 알수가 없지만

혹시라도 저하고 똑같은 문제를 겪으시는 분이 계실까봐 글남깁니다...^^;;

 

 

................................ 이하 기존 작성했 던 글.......................

안녕하세요? 너무 초보적인 질문같아서 좀 창피하기도 한데, 다름이 아니고,

 

중급강의 최종 소스를 바탕으로 제가 예전에 만들어 보고 싶었던 앱을 만들려고 하고 있습니다.

백엔드는 예전에 PHP를 좀 다뤄본적이 있어서 일단은, 그래도 친숙한 PHP로 백엔드를 만들어볼려고 하는데,로그인 단계부터 잘 진행이 안되네요..ㅠㅠ

 

강사님 강의 덕분에 JWT 및 토큰 관리 개념을 배워서 이걸 나중에 PHP로 구현해볼려고는 하고 있기는 한데,

우선 flutter로 앱 만드는 것에 집중하고 싶어서, 일단은 앱에서 로그인 요청을 하면 서버측 페이지에 "하드코딩"한 JWT 토큰 정보를 사용자측 앱으로 전달되게해서 로그인을 할 수 있게 하고 싶은데, 아무리 해도 로그인이 안되네요.

 

제가 임시로 구축한 사이트에 강의에 맞춰서 아래 경로를 맞췄고

http://제 도메인 주소/auth/login

이 페이지를 호출하면 POSTMAN에서 로그인 후 응답받았던 아래 토큰을 복사해서

페이지에 담은 후

클라이언트 앱으로 전달되게 했는데 아무리 해도 로그인이 안되고 에러가 뜹니다.

 

{
    "refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6InRlc3RAY29kZWZhY3RvcnkuYWkiLCJzdWIiOiJmNTViMzJkMi00ZDY4LTRjMWUtYTNjYS1kYTlkN2QwZDkyZTUiLCJ0eXBlIjoicmVmcmVzaCIsImlhdCI6MTcwNjI1ODYwMCwiZXhwIjoxNzA2MzQ1MDAwfQ.dvMz8WgEk-28q3F2J4E5CLLUURO1w8S7MlgqGje5ils",
    "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6InRlc3RAY29kZWZhY3RvcnkuYWkiLCJzdWIiOiJmNTViMzJkMi00ZDY4LTRjMWUtYTNjYS1kYTlkN2QwZDkyZTUiLCJ0eXBlIjoiYWNjZXNzIiwiaWF0IjoxNzA2MjU4NjAwLCJleHAiOjE3MDYyNTg5MDB9.lnCJ7Okwvk1xh2WNz8n4oXbHWczy1H72sVb4znOXWUs"
}

 

제 짧은 소견으로는 어찌되었건 클라이언트앱으로 토큰 정보가 전송되면 로그인이 진행되어야 할 텐데

안되는 이유가 무엇인지 모르겠습니다...

 

........................

.......................

 

위의 질문을 쓰고, 몇가지 더 테스트를 해본 결과를 종합하면,

Dio에서 JWT형식으로 된 토큰(하드코딩한 토큰)이 담긴 응답은 내부적으로 어떤 검증 절차를 거쳐서

오류를 일으키는 것 같습니다.

 

오류는 다음과 같은 오류가 뜨는데,

다른 페이지는 아래와 같은 오류가 뜨지 않고 제대로 정보를 수신합니다.

 

I/flutter (22276): Dio 에러 상세정보:

I/flutter (22276): 타입: DioErrorType.response

I/flutter (22276): 메시지: Http status error [301]

I/flutter (22276): 에러: Http status error [301]

I/flutter (22276): 응답: <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">

I/flutter (22276): <html><head>

I/flutter (22276): <title>301 Moved Permanently</title>

I/flutter (22276): </head><body>

I/flutter (22276): <h1>Moved Permanently</h1>

I/flutter (22276): <p>The document has moved <a href="http://제 도메인 주소/auth/token/">here</a>.</p>

I/flutter (22276): </body></html>

 

결론적으로 하드코딩된 JWT 토큰은 Dio 패키지를 통해서 정상적으로 응답을 수신할 수 없으며,

JWT 토큰을 제대로 서버측에서 수신하려면 서버측에 JWT 토큰을 제대로 인증하고 발급할 수 있게

구축을 해야한다로 귀결되는 것 같습니다.

 

이러한 결론이 맞을까요?

 

 

이 /auth/login/auth/login

답변 2

·

답변을 작성해보세요.

0

안녕하세요!

만약에 끝에 /를 꼭 붙여야 요청이 들어가도록 설계하셨다면 붙여줘야 되는게 정상입니다.

오히려 postman에서 왜 안붙여도 응답을 받을 수 있는지가 의문이네요.

감사합니다!

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.01.28

안녕하세요, 인프런 AI 인턴입니다.
Username님, 문제를 하나씩 해결해 나가 보겠습니다.

말씀하신대로 요청 주소의 마지막에 “/“를 붙이지 않아서 생긴 문제로 보입니다. 웹 서버 설정에 따라서는 엔드포인트의 마지막에 슬래시(”/“)를 붙이지 않으면 서버가 자동으로 해당 경로에 “/“를 붙여 리다이렉트하는 경우가 있습니다. 이때 클라이언트는 리다이렉트 응답을 받게 되고, 이 행동이 Dio 라이브러리에서 오류로 처리될 수 있습니다. 반면, Postman 같은 API 테스팅 툴은 자동으로 리다이렉트를 따라가 처리하기 때문에 문제가 없어 보일 수 있습니다.

Dio가 301 Moved Permanently 오류를 반환하는 것은 대부분 서버가 클라이언트의 요청을 다른 URL로 영구적으로 이동시키라고 알려줄 때 발생합니다. 이 문제를 해결하려면 요청 URL이 서버의 기대하는 형식과 정확히 일치하는지 확인해야 하며, 필요하다면 서버 설정을 업데이트하여 리다이렉트 없이도 올바른 응답을 반환하도록 조정해야 합니다.

JWT 토큰이 하드코딩되어 있다면 실제로는 서버에서 인증 과정을 거치지 않는 상황이기 때문에, 이를 클라이언트 앱에서 사용하기 위해서는 클라이언트가 서버로부터 응답을 제대로 받을 수 있도록 구성해야 합니다.

서버에서 JWT를 인증하고 발급하는 과정을 거치지 않는다면, 이는 보안상의 문제를 일으킬 수 있으므로, 실제 배포되는 애플리케이션에서는 관련된 백엔드 로직을 구현하는 것이 좋습니다.

Username님의 경우, 만약 테스트 단계에서 단순히 JWT 토큰을 사용하고 싶다면 하드코딩된 값을 클라이언트가 성공적으로 받아올 수 있도록 URL 형식을 맞추거나, Dio의 리다이렉트를 처리하는 방식을 조정해야 할 것 같습니다. 하지만 최종적인 앱을 구현할 때는 서버에서 JWT 토큰을 동적으로 생성하고 검증하는 백엔드 로직을 구축하는 것이 중요합니다.