2014-10-11 53 views
1

所以我建立了一個html表單來與Slack進行交互。目前我的js代碼看起來像這樣。保護API令牌,使它成爲我的index.js中的一個變種?

$("#submitemail").click(function(){ 
    $.post(
      "https://openpgh.slack.com/services/hooks/incoming-webhook?token=MY_SECRET_TOKEN", 
      JSON.stringify({'text':'invite request from: '+$("#email").val(),'username':'Slack Inviter','icon_emoji':':raising_hand:'}) 
    ).success(function(){ 
       $("#email").val(""); 
      }); 
}); 

,如果任何人都只是複製這個從我的html文件,他們可以只運行一個控制檯命令並更改JSON和轟炸我的鬆弛組大量的廢話,直到他們擊中了API調用的限制。

我想知道的是,如果我可以將此存儲在我的i​​ndex.js(我使用node.js模板)作爲var,然後在html中調用它。

任何選項或建議非常感謝,我對此很新。

我的結構是:

Slack App 
|_node_modules 
| |_express 
|_public 
| |_index.html 
| |_node.svg (idk what this does) 
|_.gitignore 
|_app.json 
|_index.js 
|_package.json 
|_procfile 
|_README.md 

了代碼爲我index.js只是

var express = require('express'); 
var app = express(); 

app.set('port', (process.env.PORT || 5000)); 
app.use(express.static(__dirname + '/public')); 

app.listen(app.get('port'), function() { 
    console.log("Node app is running at localhost:" + app.get('port')) 
}); 

我可以在我的全功能HTML拋出,如果你想它只是一個基本的模式W/A按鈕點擊執行表單並拉電子郵件。

+2

你可能*但它並不真正解決問題,因爲任何人都可以彈出打開控制檯並查看index.js源代碼。理想情況下,您可以在服務器端進行API調用,然後將結果傳遞給瀏覽器。 – 2014-10-11 03:42:52

+0

hummm好的我會研究一下。我的index.js是什麼服務從服務器我的應用程序,所以也許我寫錯了 – FPcond 2014-10-11 03:49:10

+0

仍然有點難住如何使這發生在服務器端有一個很好的教程,我可以挖掘? – FPcond 2014-10-11 04:37:50

回答

0

聲明:此代碼是未經測試

你基本上會做這樣的事情:

index.js(註釋來解釋我加):

var express = require('express'); 
// install request module 
var request = require('request'); 
var app = express(); 

// make a new route that you can call from the client side 
app.get('/getSlackData', function(req, res) { 

    //variable to hold your response from slack 
    var slackResponse; 

    //make the request to slack 
    var slackUrl = "https://openpgh.slack.com/services/hooks/incoming-webhook?token=MY_SECRET_TOKEN"" 
    request(slackUrl, function (error, response, body) { 
    if (!error && response.statusCode == 200) { 
     slackReponse = response; 
    } else { 
     console.log(error); 
    }); 
    return slackResponse; 
}); 

app.set('port', (process.env.PORT || 5000)); 
app.use(express.static(__dirname + '/public')); 

app.listen(app.get('port'), function() { 
    console.log("Node app is running at localhost:" + app.get('port')) 
}); 

所以我們增加了一個新的路由,這基本上是一個可以從客戶端調用的API,它將返回從Slack獲得的JSON對象。你幾乎可以留下您的客戶端代碼相同,只是改變你調用的路線:我希望我理解正確你的問題

$("#submitemail").click(function(){ 
$.post("/getSlackData", 
    JSON.stringify({'text':'invite request from:'+$("#email").val(),'username':'Slack Inviter','icon_emoji':':raising_hand:'}) 
).success(function(){ 
    $("#email").val(""); 
    }); 
}); 

,至少應該讓你在正確的方向。