我用Feathers创建了一个应用程序。我已经使用这个应用程序一段时间了。它成功地托管了一个博客和其他一些网页。但是,我现在已经到了需要保护我的一些路线的地步。例如,我希望为我的管理活动 (/admin) 提供路由,但我只希望特定用户具有访问权限。
我知道我需要使用身份验证和授权组件。但是,此时,我被困在授权上。我的目标是通过谷歌使用OAuth进行身份验证。但是,为了克服我的身份验证挑战,我很高兴只使用硬编码的用户名/密码来锁定/admin
路由(不,它没有部署)。
目前,我有
const app = feathers();
const routes = require('./routes');
app.configure(configuration(path.join(__dirname, '..')));
app.use(compress())
.options('*', cors())
.use(cors())
.use(favicon( path.join(app.get('public'), 'favicon.ico') ))
.use('/public', serveStatic(app.get('public'), staticFileSettings ))
.use(bodyParser.json())
.use(bodyParser.urlencoded({ extended: true }))
.configure(routes)
.configure(hooks())
.configure(rest())
.configure(socketio())
.configure(services)
.configure(middleware)
.configure(authentication())
;
// Setup the authentication strategy.
app.authenticate({
type: 'local',
'email': 'admin@feathersjs.com',
'password': 'admin'
}).then(function(result){
console.log('Authenticated!', result);
}).catch(function(error){
console.error('Error authenticating!', error);
});
我的问题是,一旦我添加带有app.authenticate内容的代码块,当我启动应用程序时就会出现错误。错误说:
TypeError: app.authenticate is not a function
如果我删除app.authenticate(...);
我的应用程序启动正常,但没有任何内容被锁定。在我的 ./routes/index.js 文件中,我有:
app.use('/admin', function(req, res) {
res.render('admin/index.html', {});
});
其中,渲染得很好。它不限于经过身份验证和授权的用户。我错过了什么?在最低限度上,我试图了解如何克服app.authenticate
错误。
为了保护路由免受未经授权的访问,您需要遵循在执行feathers generate authentication
时安装的feathers-authentication
包提供的快速中间件的记录用法。
下面是对/admin
路由进行身份验证的示例。
const auth = require('feathers-authentication');
app.use(
'/admin',
auth.express.authenticate('jwt'), // <-- this is a strategy, can local/jwt... etc
(req, res, next) => {
console.log("Request for '/admin'...");
res.render('admin');
}
);