Go Revelフレームワーク jQuery非同期処理

概要

Go RevelフレームワークでAjax非同期処理を実装します。

CSRF 対策

以下コマンドにより
RevelフレームワークでCSFR対策する為のライブラリをインストール

1
$ go get github.com/cbonello/revel-csrf
  • app/init.go

ajax実行時にCSRFチェックする為、init.goでのチェックを外すように設定

以下CSRFのFilter設定

1
2
3
4
5
6
func init()
revel.Filters = []revel.Filter{
...
...
csrf.CSRFFilter, // CSRF prevention.
...

conf/routes で実行するAPIのURLはAjax実行時にCSRFチェックする為、
init.goではチェックを対象外とする様に設定

1
csrf.ExemptedFullPath("/api_execute")

View側の設定

  • views/header.html

<head>〜</head> 内にCSRFチェック用ハッシュ値をmeta情報として埋め込みます。

1
<meta name="csrf-token" content="{{ .csrf_token }}">

jQueryファイル

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
function setAjaxToken( token ) {
// ajax --- start --------------------------------------------------
$.ajaxSetup({
crossDomain: false,
beforeSend: function(xhr, settings) {
if (!csrfSafeMethod(settings.type)) {
xhr.setRequestHeader("X-CSRFToken", token );
}
}
});
}

$(document).ready(function () {
$(document).on("click", ".ajax_execute", function (event) {
event.preventDefault();

setAjaxToken( postData['_token'] );

var ajaxParamas = {};
ajaxParamas["type"] = "POST";
ajaxParamas["url"] = action;
ajaxParamas["data"] = postData;
ajaxParamas["cache"] = false;
ajaxParamas["dataType"] = "json";

$.ajax(ajaxParamas)
.success( function(res) {
console.log("(^-^) OK")
}).error ( function() {
console.log("(>_<) NG")
});
return false;
})

簡単…とは行ってない気がしますが
CSRF対策ができました。

Go Revelフレームワーク jQuery非同期処理

https://kenzo0107.github.io/2015/08/29/2015-08-30-go-revel-fw-jquery/

Author

Kenzo Tanaka

Posted on

2015-08-30

Licensed under

コメント