JJoriping / KKuTu

글자로 놀자! 끄투 온라인
http://jjo.kr/kkutu
GNU General Public License v3.0
326 stars 263 forks source link

이슈 #856

Closed 124525 closed 3 years ago

124525 commented 3 years ago

구글 로그인 OAuth에서 나온 아이디와 비번 제 끄투에다가 넣었는데 로그인 버튼이 안 보이네요... 따른걸 보니 뒤에 disabled를 지우라는데 그게 어디있는거죠;;;

lshqqytiger commented 3 years ago

Server\lib\Web\auth 폴더 내 auth_google.js 파일 외의 다른 파일들의 확장자를 바꾸어 login.js가 인식하지 못하게 만드시면 됩니다.

124525 commented 3 years ago

구글 외 나머지 js 확장자 이름을 .md라고 했는데도 안 되네요... 그리고 이상하건 구글 로그인 아이디는 .com 으로 끝나는데 이게 맞는건가요..

lshqqytiger commented 3 years ago

로그에 OAuth Strategy google loaded successfully. 이게 뜨는지 확인해주세요.

124525 commented 3 years ago

그런 표시들은 안 뜨고 그냥 뭐 [2021-04-27 15:52:43] @9amp0ZVIY- login, {} 이런거만 뜨는데... 이런거 알려 주는 영상 강의같은건 없나요... [2021-04-27 14:46:33] OAuth Strategy google is not loaded

lshqqytiger commented 3 years ago

auth.inc.json을 auth.json으로 이름 수정하셨나요

124525 commented 3 years ago

구글 로그인 외부로 설정하지 않아서 발생한 문제 같긴 한데.... localhost로 해도 안 됩니다. 외부로 설정하지 않아서 발생한 문제는 아닌거 같습니다만...

lshqqytiger commented 3 years ago

그냥 아예 구글 로그인 자체를 인식을 못하고 있는 것 같습니다. auth.json 파일이 존재하고 그 안에 clientID와 clientSecret 값을 넣으신게 맞나요?

124525 commented 3 years ago

사용자 인증정보에 있는 OAuth 2.0 클라이언트 ID에서 준 아이디와 비번을 넣었습니다. 디스코드 로그인 구현하는 영상을 확인해 보니, 그곳에서는 OAuth2 의 Redirects에서 도메인과 /login/discord를 사용하던데 구글에서도 그것을 추가하는 기능이 있는건가요..

whskr commented 3 years ago

image 이런 거 말씀 하시는 건가요?

lshqqytiger commented 3 years ago

OAuth Strategy google is not loaded 가 나왔다는 것은 login.js에서 auth_google.js 파일을 로드하지 못했다는 말이고 callback URL 설정과는 무관한 그보다 이전에 해결해야할 문제입니다.

구글 OAuth 2.0의 clientID 값은 .com으로 끝나는 것이 맞으며, 구글 OAuth 2.0에서 리디렉션 URL (Callback URL) 설정은 API 및 서비스 -> 사용자 인증 정보 -> 승인된 리디렉션 URI 옵션을 수정하면 됩니다.

auth를 정의하는 도중 문제 발생 => auth_[authType].js 파일이 존재하지 않음

auth.config를 불러오는 도중 문제 발생 => auth.json에 값이 입력되지 않았거나 아예 파일이 부재 auth.json 예제

{
    "daldalso": {
        "clientID": "q5f5h8j4-q1f4-d8b4-n5v4-h8r41f4g8h4f",
        "clientSecret": "87hm4mh1h8n5b2gn9b3b69f5bn8v4b8b47n4c65b54n8c4bn45",
        "callbackURL": "/login/daldalso/callback"
    }, "naver": {
        "clientID": "dROUg-qidg4Df49gfG5",
        "clientSecret": "riugr63GF3y",
        "callbackURL": "/login/naver/callback"
    }, "google": {
        "clientID": "495272763769215-5jt8j7gh45hjg2h1g8mh.apps.googleusercontent.com",
        "clientSecret": "greu45Hhjgno0rgU74f",
        "callbackURL": "/login/google/callback"
    }, "discord": {
        "clientID": "25761927845125",
    "clientSecret": "Eefsdf66RGjt9jg75HJTjtffgh",
        "callbackURL": "/login/discord/callback"
    }, "kakao": {
        "clientID": "u8kj15hj5gj6h9n45m8h5m6hh",
        "callbackURL": "/login/kakao/callback"
    }, "line": {
        "clientID": "75929752813",
    "clientSecret": "585j4g4h1g5n4m7g5g1f9d5f8fg5",
        "callbackURL": "/login/line/callback"
    }, "github": {
        "clientID": "h45hj4j1hj5hj6g6",
    "clientSecret": "h154g1h0g560mh6h5g9h2h6g9",
        "callbackURL": "/login/github/callback"
    }
}

(모든 값은 임의의 값. 모두 입력되어 있을 필요는 없으나 사용할 로그인 방식의 clientID와 clientSecret 값은 전부 입력되어 있어야함.)

auth_[authType].js 파일이 존재하고 auth.json에 값을 입력함 => OAuth Strategy google is not loaded가 뜰 이유 없음.

124525 commented 3 years ago

[2021-04-27 16:16:34] (ex:0.0.0.0.0) @9amp0ZVIY- login, {} [2021-04-27 16:17:12] (ex:0.0.0.0.0) @NkQDg6jV8M portal, {} 이렇게 뜨는데.. 그 OAuth Strategy google is not loaded는 로그 초반에 뜬 거고요 ex:0.0.0.0은 제 공인 Ip라서 가린겁니다

lshqqytiger commented 3 years ago

그건 그냥 접속 기록 로그입니다.

124525 commented 3 years ago

지금 callback이 딱히 상관 없다는 말씀이신건가요?

lshqqytiger commented 3 years ago

일단 지금 로그인 버튼도 안나오는 상황 아닌가요? 그런 상황에서는 callback URL이 우선시 되어야 할 상황이 아닙니다. 물론 callback URL이 설정되어 있지 않으면 로그인 진행 도중 문제가 생기지만 일단 로그인 방식을 login.js에서 인식하게 하는 것이 우선입니다.

124525 commented 3 years ago

저 서버를 껏다 다시 키니까 되는데요....ㅋㅋㅋㅋㅋ 이제는 callback을 해야 되는 건가요?

whskr commented 3 years ago

image 사용자 인증 정보에서 callback 관리하실 수 있습니다.

124525 commented 3 years ago

callback은 어케 하는거ㅈ

lshqqytiger commented 3 years ago

끄투는 프론트엔드 작업을 제외한 거의 모든 작업은 갱신을 위해선 서버 재부팅이 필요합니다. callback URL 설정을 안하셨다면 해야죠. 제가 위에 적어두었습니다.

124525 commented 3 years ago

InternalOAuthError : C : \ Users \ Neonews \ OneDrive \ 바탕 화면 \ Coding Shout \ KKuTu-5663dd47d53b05c6c16f1e0568eef5b5095e3ca2 \ Server \ lib \ node_modules \ passport-google-oauth2 \ lib \ oauth2.js : 92 : 28 에서 passBackControl 에서 사용자 프로필을 가져 오지 못했습니다 . C : \ Users \ Neonews \ OneDrive \ 바탕 화면 \ Coding Shout \ KKuTu-5663dd47d53b05c6c16f1e0568eef5b5095e3ca2 \ Server \ lib \ node_modules \ oauth \ lib \ oauth2.js : 132 : 9) at IncomingMessage. (C : \ Users \ Neonews \ OneDrive \ 바탕 화면 \ Coding Shout \ KKuTu-5663dd47d53b05c6c16f1e0568eef5b5095e3ca2 \ Server \ lib \ node_modules \ oauth \ lib \ oauth2.js : 157 : 7) at IncomingMessage.emit (events.js : 326 : 22) at endReadableNT (_stream_readable.js : : 12) at processTicksAndRejections (internal / process / task_queues.js : 84 : 21)

124525 commented 3 years ago

InternalOAuthError? 처음 들어보네요

lshqqytiger commented 3 years ago

설정을 다 안하신 것 같은데요 (오류 발생 시 구글링을 위해 번역은 끄시는 게 좋습니다)

사용자 인증 정보의 승인된 자바스크립트 원본, 승인된 리디렉션 URI OAuth 동의 화면의 * 표시가 있는 모든 항목을 전부 작성하셨나요

124525 commented 3 years ago

3개 작성하면 되는거 아닌가요...

124525 commented 3 years ago

이름 http://geraldine.kro.kr http://geraldine.kro.kr/login/google/callback 이렇게 했는데

lshqqytiger commented 3 years ago

번역 전이 InternalOAuthError: failed to fetch user profile 이었던 것 같네요. scope 값이 잘못된 것입니다. 아래와 같이 설정해주세요.

scope: ['profile', 'email']
124525 commented 3 years ago

어디에다가 설정 하는건지 잘 모르것습니다

lshqqytiger commented 3 years ago

auth_google.js입니다. 당연히 서버 재부팅 하셔야 적용되구요.

124525 commented 3 years ago

scope: ['profile', 'email'] 이렇게 적어도 똑같은 오류가 생기는거 같은데 InternalOAuthError: failed to fetch user profile at C:\Users\jslim\OneDrive\바탕 화면\정리\KKuTu-5663dd47d53b05c6c16f1e0568eef5b5095e3ca2\Server\lib\node_modules\passport-google-oauth2\lib\oauth2.js:92:28 at passBackControl (C:\Users\jslim\OneDrive\바탕 화면\정리\KKuTu-5663dd47d53b05c6c16f1e0568eef5b5095e3ca2\Server\lib\node_modules\oauth\lib\oauth2.js:132:9) at IncomingMessage. (C:\Users\jslim\OneDrive\바탕 화면\정리\KKuTu-5663dd47d53b05c6c16f1e0568eef5b5095e3ca2\Server\lib\node_modules\oauth\lib\oauth2.js:157:7) at IncomingMessage.emit (events.js:326:22) at endReadableNT (_stream_readable.js:1241:12) at processTicksAndRejections (internal/process/task_queues.js:84:21)

lshqqytiger commented 3 years ago

package.json 안의

"passport-google-oauth2": "^0.1.6",

을 아래와 같이 바꾸고

"passport-google-oauth2": "^0.2.0",

cmd로 npm install 한번 해보세요

124525 commented 3 years ago

Package.json에 "passport-google-oauth2": "^0.1.6", 이라는 말이 없습니다. 그리고 추가해서 "passport-google-oauth2": "^0.2.0", 이렇게 하면 서버가 실행이 안 되고요 제가 Kkutu 신 버전이 아닌 구버전으로 하고 서버를 구축하고 있습니다. 신버전에는 package.json이 다른 건가요? 제가 한번 확인해 보겠습니다

124525 commented 3 years ago

/server/package.json 말하시는거 아닌가요? 전체 코드가 { "name": "kkutu-server", "version": "2.5.1", "description": "Rule the words! KKuTu Online Server", "main": "main.js", "scripts": { "start": "electron ." }, "repository": "https://github.com/JJoriping/KKuTu", "keywords": [ "kkutu" ], "author": "JJoriping", "license": "GPL-3.0", "devDependencies": { "electron": "^1.4.15", "electron-packager": "^8.5.1", "electron-pug": "^1.5.1" } } 이렇게 됩니다 /server/package.json에 들어 있는 코드 입니다

lshqqytiger commented 3 years ago

제가 말씀드린 건 Server\lib\package.json입니다.

124525 commented 3 years ago

C:\Users\jslim>npm install npm WARN saveError ENOENT: no such file or directory, open 'C:\Users\ㅁㄴㅇㄹ\package.json' npm WARN enoent ENOENT: no such file or directory, open 'C:\Users\ㅁㄴㅇㄹ\package.json' 오류가 생긴거 같은데... ''cd C:\Users\아몰라\OneDrive\바탕 화면\ㅁㄴㅇㄹ\KKuTu5663dd47d53b05c6c16f1e0568eef5b5095e3ca2\Server\lib/package.json 이렇게 하고 npm install해야 되는거죠?

lshqqytiger commented 3 years ago

npm install은 Server\lib 안에서 하시면 됩니다.

124525 commented 3 years ago

되었는데.. 게임을 실행하면 대기상태에서 1초 남기고 서버와 연결이 끊겼다고 합니다 이런 오류는 어떻게 해결하는 건가요?

lshqqytiger commented 3 years ago

그건 구글 로그인과 무관한 이슈입니다. 게임 서버와 제대로 연결이 안되었을 가능성이 높지만 디버깅 해봐야 알 수가 있죠.

124525 commented 3 years ago

Pug interceptor registered successfully W: InternalOAuthError: failed to fetch user profile at C:\Users\jslim\OneDrive\諛뷀깢 ?붾㈃\?뺣━\KKuTu-5663dd47d53b05c6c16f1e0568eef5b5095e3ca2\Server\lib\node_modules\passport-google-oauth2\lib\oauth2.js:92:28 at passBackControl (C:\Users\jslim\OneDrive\諛뷀깢 ?붾㈃\?뺣━\KKuTu-5663dd47d53b05c6c16f1e0568eef5b5095e3ca2\Server\lib\node_modules\oauth\lib\oauth2.js:132:9) at IncomingMessage.<anonymous> (C:\Users\jslim\OneDrive\諛뷀깢 ?붾㈃\?뺣━\KKuTu-5663dd47d53b05c6c16f1e0568eef5b5095e3ca2\Server\lib\node_modules\oauth\lib\oauth2.js:157:7) at IncomingMessage.emit (events.js:326:22) at endReadableNT (_stream_readable.js:1241:12) at processTicksAndRejections (internal/process/task_queues.js:84:21)

124525 commented 3 years ago

구글 로그인 하기 전까지는 잘 실행이 되었습니다만..

lshqqytiger commented 3 years ago

게임 서버가 열려있는지 확인해주세요.

124525 commented 3 years ago

서버가 정상적으로 켜져 있는ㄷ

124525 commented 3 years ago

localhost는 잘 되는데 포트포워딩된 geraldine.kro.kr 만 안 되네요..

lshqqytiger commented 3 years ago

포트포워딩은 특정 도메인을 대상으로 하는 것이 아닙니다. 포트포워딩과는 무관하고, 방화벽 설정은 하셨나요

124525 commented 3 years ago

방화벽은 그냥 나오는거 다 허용했는데.... 수동으로 해야 되는 것이 있나요?

lshqqytiger commented 3 years ago

네 당연하죠. 방화벽에서 지금 게임 서버 포트를 통한 웹소켓 통신을 제한하고 있습니다. 1 고급 보안이 포함된 Windows Defender 방화벽에서 인바운드 설정을 해주셔야 합니다.

124525 commented 3 years ago

어떻게 하는 건가요...ㅠ localhost로 하는건 그걸 안 해도 됬는데..

lshqqytiger commented 3 years ago

원래 이슈는 이런 것까지 세세하게 알려드리는 곳이 아닙니다. (그리고 지금 주제는 이 이슈의 원주제인 구글 로그인과는 한참 멀어졌습니다..) 방화벽 설정은 어떻게 보면 포트포워딩보다 쉬운 작업입니다. 검색하면 다 찾을 수 있는 것들이고 다른 이슈에서도 이미 여러번 언급된 적이 있습니다. localhost -> localhost 통신은 당연히 모든 포트를 통한 모든 접속이 허용됩니다. 하지만 외부에서 접속 시와 도메인을 통한 접속 시에는 그렇지 않죠 1 2 3 4 5

124525 commented 3 years ago

포트 번호를 저 4개만 등록하면 되는건가요? 서버와 연결이 종료되었습니다#1006 이라는 표시가 나서..

lshqqytiger commented 3 years ago

따로 포트를 변경하거나 하지 않았다면 저 4개가 기본입니다

124525 commented 3 years ago

포트포워딩한 그 포트번호는 안 넣어도 되는건가요?(???)

lshqqytiger commented 3 years ago

끄투에서 사용하는 포트는 80, 443, 8080, 8496이 전부인데 어떤 포트를 포워딩하신거죠

124525 commented 3 years ago

제가 Ipv4인가 그걸로 해서 따로 한 제럴딘.온라인.한국 이라는 게 있는데 그거는 딱히 뭐 안 정해도 되는거 같아요