Closed june2007 closed 2 years ago
어떤 소셜 로그인 방식(Strategy)으로 로그인하셨나요?
디스코드로 로그인 했스비다
$c.profile.title
이 falsy고 $c.profile.name
이 undefined
인 상황인데 auth_discord.js의 module.exports.config.scope
값이 "identify"
로 되어있는지 확인해보세요.
module.exports.config.scope
값이 "identify"
로 되어있다면 디스코드에서 그렇게 응답했을 것 같지는 않고 로그인 과정에서 문제가 있었던 것 같습니다.
그런 증상이 반복되면 auth_discord.js에서 디스코드에서 어떻게 응답했는지 확인이 필요합니다.
auth_discord.js 에는
const config = require('../../sub/auth.json');
module.exports.config = {
strategy: require('passport-discord').Strategy,
color: '#7289DA',
fontColor: '#FFFFFF',
vendor: 'discord',
displayName: 'withDiscord'
}
module.exports.strategyConfig = {
clientID: config.discord.clientID,
clientSecret: config.discord.clientSecret,
callbackURL: config.discord.callbackURL,
passReqToCallback: true,
scope: "identify"
}
module.exports.strategy = (process, MainDB, Ajae) => {
return (req, accessToken, refreshToken, profile, done) => {
const $p = {};
// var fullname = profile.username+"#"+profile.discriminator;
$p.authType = "discord";
$p.id = $p.authType+"-"+profile.id;
$p.name = profile.username;
$p.title = profile.username;
$p.image = `https://cdn.discordapp.com/avatars/${profile.id}/${profile.avatar}.png`;
process(req, accessToken, MainDB, $p, done);
}
}
라고 코드가 있습니다
const $p = {};
와 $p.authType = "discord";
사이에 console.log(profile);
을 추가해서 profile 값을 확인해보세요.
객체에 username
키가 있어야 합니다.
혹시
module.exports.strategy = (process, MainDB, Ajae) => {
return (req, accessToken, refreshToken, profile, done) => {
const $p = {};
// var fullname = profile.username+"#"+profile.discriminator;
console.log(profile);
$p.authType = "discord";
$p.id = $p.authType+"-"+profile.id;
$p.name = profile.username;
$p.title = profile.username;
$p.image = `https://cdn.discordapp.com/avatars/${profile.id}/${profile.avatar}.png`;
process(req, accessToken, MainDB, $p, done);
}
}
이런식으로 하는게 맞나요? 저렇게 해도 안돼서 일단 콘솔에 console.log(profile); 이라고 적고 보긴 했는데
<span id="profile">
"{"authType":"discord","id":"discord-907964469412511815","image":"https://cdn.discordapp.com/avatars/907964469412511815/null.png","token":"XsQ4YzDng12UwNlFhyPIwx8EqPUEIm","sid":"KnFBcphB1_uGvN504vZcZ0M47eJFjbY5"}"
</span>
라고 나오네요
프론트엔드의 global.profile
변수가 가리키는 객체는 세션의 profile
객체를 stringify한 값을 innerHTML로 가지고 있는 span 요소이기 때문에 console.log(profile);
을 통해 디버깅하고 싶었던 profile
객체가 아니고 $p
객체입니다.
auth_discord.js
는 main.js
에서 require하는 login.js
에서 require하므로 auth_discord.js
에서 console.log
함수를 호출하면 웹 서버(Node.js) 로그에 기록됩니다.
(KKuTu Server Manager를 사용하는 경우 KKuTu Server Manager에 기록)
package.json
의 dependencies
안에 passport-discord
값이 어떻게 되어있나요?
그리고 로그인 시 위 사진처럼 사용자명, 아바타, 배너 보기
가 있는지 확인해보세요.
"passport-discord": "^0.1.4",
라고 적혀있네요 그리고 사용자명, 아바타, 배너 보기는 다 있습니다
npm i passport-discord@0.1.3
또는 yarn add passport-discord@0.1.3
입력 후 서버 재부팅해보세요.
cmd에 npm i passport-discord@0.1.3
라고 해봤는데
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'
npm WARN (실명) No description
npm WARN (실명)No repository field.
npm WARN (실명) No README data
npm WARN (실명) No license field.
+ passport-discord@0.1.3
updated 1 package and audited 11 packages in 0.437s
1 package is looking for funding
run `npm fund` for details
found 0 vulnerabilities
라고 뜹니다
그리고 로그인 하면 메인페이지에 위에 파란 바 같은거에 홈 게임 갤러리 그리고 로그인한 계정 이름이 떠야하잖아요 근데 그게 안뜹니다
kkutu-core 패키지에 대해서 실행해야 합니다.
(다운로드 받은 레포지토리 폴더/Server/lib
로 이동 후 실행)
계정 이름이 뜨지 않는 것은 SESSION.profile 객체에 title 키와 name 키가 누락(undefined)되었기 때문입니다.
명령어 :
cd C:\Users\(실명)\Desktop\KKuTu-master\Server\lib
npm i passport-discord@0.1.3`
결과 :
npm WARN deprecated querystring@0.2.1: The querystring API is considered Legacy. new code should use the URLSearchParams API instead.
+ passport-discord@0.1.3
added 4 packages from 59 contributors, updated 1 package and audited 293 packages in 1.992s
found 38 vulnerabilities (1 low, 17 moderate, 16 high, 4 critical)
run `npm audit fix` to fix them, or `npm audit` for details
이렇게입니다
이제 다시 로그인해보세요.
음... 해결 되지 않았습니다. 혹시 최근에 이름 바꾸는 기능 PR에서 받았는데 그거 때문일까요?
그렇다면 확인을 해봐야 할 것 같은데 디스코드로 가능하실까요?
디스코드 가능합니다
-로 연락해주세요. 데이터베이스 쪽도 확인이 필요해보여서
해결되었습니다.
데이터베이스에 이미 유저 정보가 기록된 이후에 PR 내용을 적용하여 first
가 false
인 기존 유저의 username
값이 nickname
컬럼에 반영되지 못해 nickname
값이 계속 NULL
로 유지되어 발생하는 문제였습니다.
nickname
컬럼에 값을 직접 입력해주거나 DELETE FROM users;
로 first
값이 true
가 되도록 해주면 해결됩니다.
감사합니다 해결 됐습니다. 이슈 닫을게요
끄투 매니저에는
[2022-08-14 15:36:20] ERROR OCCURRED ON THE MASTER! :8100 [2022-8-14 3:36:20 ├F10: PM┤] ERROR: TypeError: Cannot read property 'replace' of undefined TypeError: Cannot read property 'replace' of undefined at C:\Users*\Desktop\KKuTu-master\Server\lib\Game\master.js:444:51 at exports.Tail.go (C:\Users*\Desktop\KKuTu-master\Server\lib\sub\lizard.js:43:16) at C:\Users*\Desktop\KKuTu-master\Server\lib\Game\kkutu.js:470:11 at callback (C:\Users*\Desktop\KKuTu-master\Server\lib\sub\collection.js:316:13) at Result.preCB (C:\Users*\Desktop\KKuTu-master\Server\lib\sub\collection.js:298:6) at Result.Query.handleReadyForQuery (C:\Users*\Desktop\KKuTu-master\Server\lib\node_modules\pg\lib\query.js:144:10) at Connection.<anonymous> (C:\Users*\Desktop\KKuTu-master\Server\lib\node_modules\pg\lib\client.js:180:19) at Connection.emit (events.js:314:20) at Socket.<anonymous> (C:\Users*\Desktop\KKuTu-master\Server\lib\node_modules\pg\lib\connection.js:133:12) at Socket.emit (events.js:314:20)
라고 뜨네요 ***는 제 실명 이어서 가린것입니다