如何为Express.js路由设置基本身份验证(带有生成的值)?

时间:2011-07-12 15:28:37

标签: authentication node.js proxy express

我的网站由node&使用Express框架。 我的目标是设置代理以从Yahoo Placefinder api获取数据(因为它们不提供JSONP响应)。 我想将jquery ajax请求发送到代理并返回PlaceFinder api响应。

这是我的快速路线:

app.get('/placefinder/:curr_address', function (req, res) {

var options = {
    host: 'where.yahooapis.com',
    port: 80,
    path: '/geocode?location=' + req.params.curr_address + '&flags=J&appid=[put app id here]'
};

var req = http.get(options, function (res2) {
    console.log("Got response: " + res2.statusCode);

    res2.setEncoding('utf8');
    res2.on('data', function (chunk) {
        console.log('BODY: ' + chunk);

        res.render('response', {
            response: chunk
        }); // res.render
    }); // on
}); // req
req.on('error', function (e) {
    console.log("Got error: " + e.message + "... path: " + options.host + options.path);
});
// write data to request body
req.write('data\n');
req.write('data\n');});

以上代码正常运行。例如,我可以访问mywebsite.com/placefinder/123+fake+street,90210,并显示PlaceFinder api的响应。

问题是每个人都可以访问该页面并从PlaceFinder api获得响应。我不希望这样。我只希望我的(ajax)脚本可以访问。

  1. 如何使用一些基本身份验证仅允许我的ajax请求访问mywebsite.com/placefinder/123+fake+street,90210 ...我从未使用过基本身份验证而我无法计算如何将它应用于这种情况。

  2. 或者,有什么方法可以阻止所有外部访问的placefinder目录(有点像apache .htacess)?

1 个答案:

答案 0 :(得分:1)

  

如何使用某些基本身份验证仅允许我的ajax   请求访问mywebsite.com/placefinder/123+fake+street,90210 ...   我从来没有使用过基本身份验证,我无法弄清楚如何使用   适用于这种情况。

我认为您不应该使用基本身份验证,而是使用sessions。 TJ确实有如何在https://github.com/visionmedia/express/tree/master/examples/session使用会话的示例。你应该研究更多的例子。 Connect也有一个中间件来处理basic auth。我不喜欢这种方法,因为它不安全,特别是在SSL后面不使用时。

  

或者,有什么方法可以阻止所有的placefinder目录   外部访问(有点像apache .htacess)?

在node.js中,每个应用程序都在一个单独的进程中运行。您只能绑定到host而不是INADDR_ANY

  

app.listen([port [,host]])

     

将应用服务器绑定到给定端口,默认为3000.何时   省略主机所有连接都将通过INADDR_ANY接受。

     

app.listen(); app.listen(3000); app.listen(3000,'n.n.n.n');

您还可以将node.js与NGinx一起使用。比你使用像https://serverfault.com/questions/183884/nginx-protect-directory-with-password-except-for-specific-ips/183939#183939之类的东西。 NGinx非常强大。