Closed bobpaul2612 closed 5 years ago
Can you provide your app.js
file?
var express = require('express'),
path = require('path'),
favicon = require('static-favicon'),
logger = require('morgan'),
cookieParser = require('cookie-parser'),
bodyParser = require('body-parser'),
passport = require('passport'),
LocalStrategy = require('passport-local').Strategy,
index = require('./routes/index'),
login = require('./routes/login'),
register = require('./routes/register'),
real_index = require('./routes/real_index'),
rel = require('./routes/rel'),
data_statistics = require('./routes/data_statistics'),
data_query = require('./routes/data_query'),
data_upload = require('./routes/data_upload'),
data_download = require('./routes/data_download'),
table_created = require('./routes/table_created'),
table_search = require('./routes/table_search'),
table_delete = require('./routes/table_delete'),
dbroles = require('./routes/dbroles'),
con = require('./models/mysql'),
bcrypt = require('bcrypt'),
session = require('express-session'),
MySQLStore = require('express-mysql-session')(session),
{
Enforcer
} = require('casbin'),
authz = require('casbin-express-authz');
//=================================================================
con.connect(function (err) {
if (err) {
console.log('connection db error');
return;
}
console.log('connecting db success');
})
//===============================================
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.use(favicon());
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
extended: true
}));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
//authenticate by passport =================================================
var options = {
host: 'localhost',
user: '',
password: '',
database: 'session_test'
};
var sessionStore = new MySQLStore(options);
// 目前 session 存在預設的 Memory中 , 將來可視需求將session 存至 MySQL server中.
app.use(session({
key: 'NTCU CIA SYSTEM KEY',
secret: "NTCU CIA SYSTEM",
cookie: {
maxAge: 60 * 1000 * 30
}, // 60 * 1000 = 1 分鐘 , 30 min
store: sessionStore,
resave: true,
saveUninitialized: true,
rolling: true
}));
app.use(passport.initialize());
app.use(passport.session());
//==========================================================================
// casbin-express-authz test ===============================================
// set userinfo
app.use((req, res, next) => {
// console.log('req.get = ' + req.get('Authorization'));
const username = req.get('Authorization') || 'alex';
req.user = {
username
};
next();
});
// use authz middleware
/* jshint ignore:start */
app.use(authz(async () => {
// load the casbin model and policy from files, database is also supported.
const enforcer = await Enforcer.newEnforcer('./alex_model.conf', './alex_policy.csv');
return enforcer;
}));
/* jshint ignore:end */
//response
app.use((req, res, next) => {
res.status(200).json({
status: 'OK'
});
});
//==========================================================================
// bcrypt hash test ========================================================
// app.get('/hash', function (req, res) {
// plaintext = '1234';
// bcrypt.hash(plaintext, 10, function (err, hash) {
// console.log('plaintest is :' + plaintext);
// console.log(hash);
// console.log("hash end");
// bcrypt.compare(plaintext, hash, function (err, res) {
// console.log("compare result is : " + res);
// });
// });
// });
//==========================================================================
// var acl = require('./models/acl_conf.js')(app, express);
// console.log(acl);
//路由 ======================================================================
app.use('/', index);
app.use('/login', login);
app.use('/register', register);
app.use('/real_index', real_index);
app.use('/rel', rel);
app.use('/data_statistics', data_statistics);
app.use('/data_query', data_query);
app.use('/data_upload', data_upload);
app.use('/data_download', data_download);
app.use('/table_created', table_created);
app.use('/table_search', table_search);
app.use('/table_delete', table_delete);
app.use('/dbroles', dbroles);
app.get('/logout', function (req, res) {
req.logout();
res.redirect('/');
});
app.get('/showtables', function (req, res) {
if (req.isAuthenticated() || 1) {
con.query("USE cia_db");
var cmd = "show tables";
con.query(cmd, function (err, result) {
if (err) throw err;
var tables_select = new Array();
var i = 0
result.forEach(function (table) {
tables_select[i] = new Array();
tables_select[i] = "<option>" + table.Tables_in_cia_db + "</option>";
i++;
});
res.json({
tables_select: tables_select
});
});
} else {
res.redirect('/login');
}
});
/// catch 404 and forwarding to error handler
app.use(function (req, res, next) {
var err = new Error('Not Found');
err.status = 404;
next(err);
});
/// error handlers
// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
app.use(function (err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: err
});
});
}
// production error handler
// no stacktraces leaked to user
app.use(function (err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: {}
});
});
module.exports = app;
@bobpaul2612 can you try the latest v1.0.1 release to see if it's fixed? https://www.npmjs.com/package/casbin-express-authz
when i write like
const Enforcer = require('casbin')
this problem is slaved.
but if i write like
const {Enforcer} = require('casbin')
the system will return
0|CIA | 2019-01-29 21:10 +08:00: You have triggered an unhandledRejection, you may have forgotten to catch a Promise rejection:
0|CIA | 2019-01-29 21:10 +08:00: TypeError: Enforcer.newEnforcer is not a function
0|CIA | 2019-01-29 21:10 +08:00: at app.use.authz (/home/ntcucia/CIA_DB/app.js:103:37)
0|CIA | 2019-01-29 21:10 +08:00: at /home/ntcucia/CIA_DB/node_modules/casbin-express-authz/authz.js:20:28
0|CIA | 2019-01-29 21:10 +08:00: at Layer.handle [as handle_request] (/home/node_modules/express/lib/router/layer.js:95:5)
0|CIA | 2019-01-29 21:10 +08:00: at trim_prefix (/home/node_modules/express/lib/router/index.js:317:13)
0|CIA | 2019-01-29 21:10 +08:00: at /home/node_modules/express/lib/router/index.js:284:7
0|CIA | 2019-01-29 21:10 +08:00: at Function.process_params (/home/node_modules/express/lib/router/index.js:335:12)
0|CIA | 2019-01-29 21:10 +08:00: at next (/home/node_modules/express/lib/router/index.js:275:10)
0|CIA | 2019-01-29 21:10 +08:00: at app.use (/home/ntcucia/CIA_DB/app.js:96:5)
0|CIA | 2019-01-29 21:10 +08:00: at Layer.handle [as handle_request] (/home/node_modules/express/lib/router/layer.js:95:5)
0|CIA | 2019-01-29 21:10 +08:00: at trim_prefix (/home/node_modules/express/lib/router/index.js:317:13)
0|CIA | 2019-01-29 21:10 +08:00: at /home/node_modules/express/lib/router/index.js:284:7
0|CIA | 2019-01-29 21:10 +08:00: at Function.process_params (/home/node_modules/express/lib/router/index.js:335:12)
0|CIA | 2019-01-29 21:10 +08:00: at next (/home/node_modules/express/lib/router/index.js:275:10)
0|CIA | 2019-01-29 21:10 +08:00: at SessionStrategy.strategy.pass (/home/node_modules/passport/lib/middleware/authenticate.js:338:9)
0|CIA | 2019-01-29 21:10 +08:00: at SessionStrategy.authenticate (/home/node_modules/passport/lib/strategies/session.js:75:10)
0|CIA | 2019-01-29 21:10 +08:00: at attempt (/home/node_modules/passport/lib/middleware/authenticate.js:361:16)
Thank you help me slave this problem.
@bobpaul2612 Your error is:
TypeError: Enforcer.newEnforcer is not a function
This is because we have removed Enforcer.newEnforcer()
in Node-Casbin 2.0.0, see: https://github.com/casbin/node-casbin/releases/tag/v2.0.0 , please use the new API.
Enforcer.newEnforcer()
and Enforcer.newModel()
, please use casbin.newEnforcer()
and casbin.newModel()
instead.I know it now .
really thank you for your help !!!
@bobpaul2612 if it has been fixed, please close this issue :)
Hi
i have a problem about express-authz
when i use like the simple example
the system will return
however if i change the code to
the system will return
i don`t know where i am wrong
please help me
thanks