Express.js中Passport会话存储配置报错(Sequelize+PostgreSQL)
Express.js 中使用 Passport + Sequelize 配置会话时的类型错误问题
错误信息
An error occurred for attribute sid on model Session. [cause]: TypeError: Expected type to be a string, a DataType class, or a DataType instance, but got STRING { options: { length: 36, binary: undefined }, _binary: undefined, _length: 36
相关代码
app.js 代码
// passport const passport = require('./config/auth/passport'); const session = require('express-session'); const SequelizeStore = require('connect-session-sequelize')(session.Store); const { sequelize } = require('./config/database'); // Adjust the path to your Sequelize instance const Session = require('./modules/auth/models/session'); // Adjust the path to your Session model app.use(session({ secret: process.env.SESSION_SECRET, resave: false, saveUninitialized: false, cookie: { //secure: process.env.NODE_ENV === "production", maxAge: 24 * 60 * 60 * 1000, // 24 hours }, store: new SequelizeStore({ db: sequelize, tableName: 'Session', checkExpirationInterval: parseInt(process.env.SESSION_EXPIRATION_INTERVAL, 10), expiration: parseInt(process.env.SESSION_EXPIRATION, 10) }), }));
session.js 模型代码
const { DataTypes } = require('@sequelize/core'); const { sequelize } = require('../../../config/database'); const Session = sequelize.define('Session', { sid: { type: DataTypes.STRING(36), primaryKey: true, allowNull: false, }, expires: { type: DataTypes.DATE, allowNull: false, }, data: { type: DataTypes.STRING(50000), allowNull: false, }, }, { tableName: 'Session', // Custom table name timestamps: true, // Includes createdAt and updatedAt }); module.exports = Session;
已尝试的方案
- 注释掉 store 配置后,应用可正常启动
- 将 sid 字段类型改为
DataTypes.STRING,问题未解决 - 确认启动前数据库中不存在 Session 表
- 删除 Session 模型并手动创建同结构表,问题仍存在
恳请各位提供解决方案,谢谢!
内容的提问来源于stack exchange,提问作者Minh Nguyễn
相关产品推荐
相关产品推荐

