[Node.js] express-mysql-session 에러

초이지수·2022년 9월 28일
0

Node.js

목록 보기
4/7
post-thumbnail

mysql에 session을 mysql connector로 저장하기!

를 하고 싶었으나 에러가 떴다.


🙋🏻‍♀️ express-mysql-session 설치

npm install express-mysql-session --save

https://www.npmjs.com/package/express-mysql-session


🙋🏻‍♀️ mysql connector 에러

Client does not support authentication protocol requested by server;
라는 에러가 떴다,,
검색을 해보니 2017년부터 node v16과 mysql v8 은 서로 연동이 안됐다...


☄️ 첫 번째 시도

mysql.8.0 에서는 다양한 플러그 형태의 인증 방법을 제공한다.
기본적으로 제공하는 인증 방법은 caching_sha2_password이다.

내가 설치한 node.js v16이 caching_sha2_password 인증 방법은 지원하지 않기 때문에 mysql_native_password로 변경해주었다.
(mysql 다운 그레이드는 최후의 수단이기에 하고 싶지 않았다.)


  • 변경 전

  • 변경 후

그래도 에러,, 🫣


☄️ 두 번째 시도

외부 접속 허용이 되어있는지 확인을 해야한다는 의견이 있어
host에 localhost 이외의 주소를 %로 추가해주었다.

$CREATE USER 'root'@'%' IDENTIFIED BY '비밀번호';

$SELECT host,user,plugin FROM mysql.user;

$ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '비밀번호';

그래도 에러,, 🫣


☄️ 세 번째 시도

DB에 권한 부여...

$GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
$FLUSH PRIVILEGES;

% 라는 host 이름을 인식하지 못했고..
외부 주소도 필요한게 아니었다..


app.js 다시 한 번 확인

const MySQLStore = require('express-mysql-session')(session);

const options = {
  host: 'host이름',
  port: 3306,
  user: 'user이름',
  password: '비밀번호',
  database: 'db이름'
}

const app = express();
const store = new MySQLStore(options);

🥹 해결!!!!!!!!!!!!!!

결론!
1. localhost도 연결 가능했고 (외부 접속뿐만 아니라)
2. plugin을 mysql_native_password로 변경해주고 (mysql 다운 그레이드 대신)
3. 공식문서에 나와있는 설정법을 app.js에 정확히 작성하면 해결 되었다!


참고했던 사이트

https://deeplify.dev/database/troubleshoot/not-support-authentication

profile
닫혀 있어서 벽인 줄 알고 있지만, 사실은 문이다.

0개의 댓글