2014-03-31 57 views
0

首先,感谢您的回复。 我尝试使用nodeJS创建REST API,并且我认为,oAuth2是根据我的系统对用户进行身份验证的最佳方式。REST API,OAuth2和认证错误

用户存储在LDAP中,API密钥将保留在MySQL引擎上。客户账户代码也将存储在MySQL中。 所有的过程是确定的,用户进行身份验证,API令牌已保存在MySQL的,但是当我尝试使用此令牌,护照拒绝验证了我的请求,并返回:

Error: Can't set headers after they are sent. 
    at ServerResponse.OutgoingMessage.setHeader (http.js:691:11) 
    at ServerResponse.res.setHeader (/home/lolostates/Developpement/nodejs/oauth2/test/node_modules/express/node_modules/connect/lib/patch.js:62:20) 
    at ServerResponse.res.header (/home/lolostates/Developpement/nodejs/oauth2/test/node_modules/express/lib/response.js:280:8) 
    at ServerResponse.res.json (/home/lolostates/Developpement/nodejs/oauth2/test/node_modules/express/lib/response.js:135:8) 
    at exports.info (/home/lolostates/Developpement/nodejs/oauth2/test/user.js:13:9) 
    at callbacks (/home/lolostates/Developpement/nodejs/oauth2/test/node_modules/express/lib/router/index.js:272:11) 
    at complete (/home/lolostates/Developpement/nodejs/oauth2/test/node_modules/passport/lib/passport/middleware/authenticate.js:218:13) 
    at /home/lolostates/Developpement/nodejs/oauth2/test/node_modules/passport/lib/passport/middleware/authenticate.js:200:15 
    at pass (/home/lolostates/Developpement/nodejs/oauth2/test/node_modules/passport/lib/passport/index.js:399:14) 
    at Passport.transformAuthInfo (/home/lolostates/Developpement/nodejs/oauth2/test/node_modules/passport/lib/passport/index.js:415:5) 

请求被卷曲发:

curl -H "Authorization: Bearer NoulKM889Aksf60rQONcUJwMuZHI3PDqzeXfkX3Li2BohsxNVsOrd2LLdvJAGZuE168IukUCPbviazhvBjt7VDfLFUMJRIY1fa95kGXQQKzE7etFhocsnYvbLSixbHRmCwXNx5FKj6v83Ci9f9xLqRinEKwaAUIjs03hhq8dCWIp7S0Cbi5jdkxlzwfpZxuShoAZYaFInlf4ymG5oyzQe0WJ2POXOaMarGLO7NkjyIMJXWh7s0Y" http://localhost:3000/api/userinfo 

我使用passport-http-bearer,oAuth2orize和OAuth2orize示例中提供的所有示例函数。

你能解释我为什么吗?

回答

0

看起来您已尝试在回复响应之后设置响应标头。在尝试设置标题之前,请确保您没有拨打res.end()(或类似的方法)。

+0

我从来没有叫res.end()或其他呼叫......我只能打电话与护照检查: 'exports.info2 = [ passport.authenticate( '承载',{会话:假}), 功能( req,res){ res.json(req.user) } ]' 并且承载策略不允许我的请求,但策略在DB中查找用户。 –

+0

我只是想为你解释错误信息。 exports.info(/home/lolostates/Developpement/nodejs/oauth2/test/user.js:13:9)发生了什么?这似乎是你在事后设置标题的地方。 – AlexMA

+0

对不起,我没有所有的单词。 'VAR护照=要求( '护照') exports.info = [ passport.authenticate( '承载',{会话:假}), 函数(REQ,RES){ res.json({USER_ID: req.user.mail,name:req.user.mail,范围:req.authInfo.scope}) } ]' 我只打电话给护照并返回一个json。即使他在数据库中找到用户,护照停止处理并发送401未授权。 –