无法使用express-mysql-session连接mariadb

问题描述 投票:0回答:1

我正在尝试设置express-session,并且我想使用mariaDB作为存储选项,因为我的网站已经在后端使用mariaDB作为其他存储。 在express-mysql-session的自述文件中,它说它可以与mariaDB一起使用npm express-mysql-session

我正在使用带有express、express-session和mariaDB的nodejs。

在我的服务器文件中,我按照自述文件中的说明使用它:

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

const sessionOptions = {
    //connectionLimit: 10,
    host: process.env.MARIADB_HOST,
    port: process.env.MARIADB_PORT,
    user: process.env.MARIADB_USER,
    password: process.env.MARIADB_PASSWORD,
    database: process.env.MARIADB_DATABASE,
    //createDatabaseTable: true
};

const sessionStore = new MySQLStore(sessionOptions);
app.use(session({
    key: 'session_cookie_name', // I dont know what this is for, I only included it because I hoped it might fix the issue :(
    secret: process.env.SESSION_SECRET,
    store: sessionStore,
    resave: false,
    saveUninitialized: false,
    cookie: { 
        sameSite: 'strict',
        secure: false, // set to true for production
        maxAge: 60000 * 60 * 24 // 24 hours
    }
}));

// Optionally use onReady() to get a promise that resolves when store is ready.
sessionStore.onReady().then(() => {
    // MySQL session store ready for use.
    console.log('MySQLStore ready');
}).catch(error => {
    // Something went wrong.
    console.error(error);
});

但是,当我尝试启动服务器时,出现以下错误:

Error: Server requests authentication using unknown plugin auth_gssapi_client. See TODO: add plugins doco here on how to configure or author authentication plugins.
    at PromisePool.query (C:\Users\femke\node_modules\mysql2\promise.js:356:22)
    at C:\Users\femke\node_modules\express-mysql-session\index.js:384:30
    at new Promise (<anonymous>)
    at MySQLStore.query (C:\Users\femke\node_modules\express-mysql-session\index.js:381:10)
    at C:\Users\femke\node_modules\express-mysql-session\index.js:147:17 {
  code: 'AUTH_SWITCH_PLUGIN_ERROR',
  errno: undefined,
  sql: undefined,
  sqlState: undefined,
  sqlMessage: undefined
}

我将身份验证方法更改为 gssapi,但这没有帮助。另外,我仍然希望能够使用 mysql_native_password 进行身份验证,但是当我尝试像这样更改插件方法时:

ALTER USER 'root'@'127.0.0.1' IDENTIFIED VIA mysql_native_password USING PASSWORD('myPassword') OR gssapi;

然后输入

SELECT user, host, plugin FROM user WHERE user = 'root' AND host = '127.0.0.1'

我只将 mysql_native_password 作为插件,尽管用户应该能够拥有不止一种身份验证方法 我有 mariadb 版本 11.4.2。

有人知道如何解决这个问题或者我可以做什么吗? 感谢您的帮助!

node.js express mariadb express-session
1个回答
0
投票

您使用 root 连接,您输入了错误的密码,您没有此用户。 第二个案例显然很有趣。 MariaDB 中有一个“设计决策”,即如果您尝试与未知用户连接,则需要一个“随机”客户端定义,并从中插入插件。 整个舞蹈因此它不会告诉“该用户不存在”,因为这将是一个安全问题(告诉太多),正如我们所见,它模拟了一些现有用户,效果相当差。在那里,很可能使用 auth_gssapi 随机选择 root 。总而言之,当你看到这条消息时,99.99% 都是“该用户不存在”。并非所有纸面上看起来不错的设计决策在实践中也都很好。

© www.soinside.com 2019 - 2024. All rights reserved.