Alamofireを使って、auth_token
をパラメーターではなく、ヘッダーに含めてHTTP通信をする方法を紹介したいと思います。
そもそも何でauth_token
をパラメーターに含めてはいけないのか!?
ユーザーは自由にパラメーターを変更してアクセスすることができます。HTTPメソッドがGET
であればURLに表示されている部分を変更するだけといういとも簡単な操作で可能になります。たとえHTTPメソッドがPOST
でも同様です。
なので、盗まれてはいけない値auth_token
は絶対にパラメーターに含めてはいけません。
auth_tokenをヘッダーに含める方法
パラメーターを送らない場合
は、非常に簡単です。
StockTweets.swift
class func checkReplyLetter() {
let authToken = CurrentUser.sharedInstance.authToken
let URL = NSURL(string: "http://localhost:3000/api/v1/twees/")!
let mutableURLRequest = NSMutableURLRequest(URL: URL)
mutableURLRequest.HTTPMethod = "GET"
// ヘッダーにauth_tokenを含める
mutableURLRequest.setValue(authToken, forHTTPHeaderField: "auth_token") // 第一引数が値で、第二引数がキー
let manager = Alamofire.Manager.sharedInstance
// HTTP通信
manager.request(mutableURLRequest)
.responseJSON { (request, response, JSON, error) in
}
}
パラメーターを送る場合
は、少しだけやることが増えます。
StockTweets.swift
class func checkReplyLetter() {
let authToken = CurrentUser.sharedInstance.authToken
var params: [String: AnyObject!] = [
"text": text,
]
let URL = NSURL(string: "http://localhost:3000/api/v1/twees/")!
let mutableURLRequest = NSMutableURLRequest(URL: URL)
mutableURLRequest.HTTPMethod = "POST" // GETではなくPOST
mutableURLRequest.setValue(authToken, forHTTPHeaderField: "auth_token")
let manager = Alamofire.Manager.sharedInstance
// 増える箇所
let request = Alamofire.ParameterEncoding.URL.encode(mutableURLRequest, parameters: params).0 // エンコードの設定が必要になります。
// HTTP通信
manager.request(request)
.responseJSON { (request, response, JSON, error) in
}
}
さいごに
Alamofireの導入方法の記事
· http://qiita.com/SoyaTakahashi/items/4a40aefdf13417b1857f