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