如何在hapijs

时间:2016-06-21 10:02:44

标签: node.js hapijs oauth2 oauth2orize

我在hapijs中实现了oauth2orize。但是当我打电话给api时,没有任何事情发生。该函数进入oauth2orize模块的code.js文件并挂起。请建议我如何在hapjs中实现oauth2orize。 hapi-oauth2orize也没有像移民局那样工作。 hapi-oauth2orize插件抛出选项错误。

const Hapi = require('hapi');
const server = new Hapi.Server();
const oauth2orize = require('oauth2orize');
var oauth = oauth2orize.createServer();

server.connection({ 
    host: 'localhost', 
    port: 8000 
});

    server.register([{
        register: require('hapi-mongodb'),
        options: dbOpts
    }], function (err) {
        if (err) {
            console.error(err);
            throw err;
        }
        server.start();

        server.route([
                    {
                      method: 'GET',
                      path: '/oauth/authorizegrant',
                      config: {
                        auth: false,
                        handler: function(request, reply) {
                            var clientId = request.query.client_id,
                                redirectUrl = request.query.redirect_uri,
                                resType = request.query.response_type,
                                state = request.query.state;
                            oauth.grant(oauth2orize.grant.code(function(clientId,redirectUrl,resType,state,callback) {
                              // Create a new authorization code
                                  console.log('client', client);
                                  var db = request.server.plugins['hapi-mongodb'].db;
                                  var code = new Code({
                                    value: uid(16),
                                    clientId: client._id,
                                    redirectUri: redirectUri,
                                    userId: user._id
                                  });

                              // Save the auth code and check for errors
                            db.collection('codes').insert(code, function(err) {
                                if (err) { console.log('err*********', err); return callback(err); }

                                callback(null, code.value);
                              });
                            }));

                        }
                      }
                    },
                ]);
    });

1 个答案:

答案 0 :(得分:0)

您需要更改传递给oauth.grant函数的参数,应该删除回调并替换为hapi的回复函数。一个简单的片段就是

if (err) {
    return reply(err);
}
return reply(code.value);

我会在插件repo中提出问题,因为这是在hapi和oauth2orize之间进行接口的最佳方式。