我使用Feathers创建了一个应用。我一直在使用这个应用程序。它成功托管了博客和其他一些网页。但是,我现在已经到了需要保护我的一些路线的地步。例如,我想为我的管理活动(/ admin)设置路由,但我只希望特定用户具有访问权限。
我知道我需要使用authentication和授权组件。但是,在这个时候,我坚持授权。我的目标是通过Google使用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
错误。
答案 0 :(得分:0)
为了保护路线免受未经授权的访问,您需要feathers-authentication
在执行feathers generate authentication
时安装的/admin
包提供。{/ p>
以下是验证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');
}
);
路线的示例。
{{1}}