羽毛 - 身份验证和授权

时间:2017-02-18 17:56:44

标签: authentication express authorization feathersjs

我使用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错误。

1 个答案:

答案 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}}