認証から利用までの流れ
https://qiita.com/settings/applications でアプリを登録し、Client ID, Client Secretを利用します。
このような認証URLをUIWebViewで表示する
https://qiita.com/api/v2/oauth/authorize?client_id=***&scope=***
リダイレクトURLの例
http://qiita.com/roana0229?code=xxx
上記のcode部分を使ってPOSTする
Login.swift
let URL: String = "https://qiita.com/api/v2/access_tokens?client_id=***&client_secret=***&code=リダイレクトされたURLに付加されているcode部分xxx"
var manager: AFHTTPRequestOperationManager = AFHTTPRequestOperationManager()
manager.POST(URL, parameters: params, success: { (requestOperation: AFHTTPRequestOperation!, response: AnyObject!) in
// requestOperation.response.statusCode
// requestOperation.responseString
}, failure:{ (requestOperation: AFHTTPRequestOperation!, response: AnyObject!) in
})
5. success:requestOperation.responseStringの内容
{"client_id":"~","scopes":"[~]","token":"xxx"}
6. これでトークンの取得が完了したので、GETなどで利用する
GetWithBearer.swift
// urlStringは任意のURL
let token: String = "4で取得したtoken"
let url: NSURL = NSURL(string: urlString)!
let request: NSURLRequest = NSURLRequest(URL: url)
let requestOperation: AFHTTPRequestOperation = AFHTTPRequestOperation(request: request)
requestOperation.setRedirectResponseBlock({ (connection: NSURLConnection!, request: NSURLRequest!, redirectResponse: NSURLResponse!) in
let fields: AnyObject = request.allHTTPHeaderFields!
if fields.objectForKey(AUTH_FIELD) != nil {
return request
}
var urlResuest: NSMutableURLRequest = NSMutableURLRequest(URL: request.URL, cachePolicy: request.cachePolicy, timeoutInterval: request.timeoutInterval)
let authValue: NSString = NSString(format: "Bearer %@", token)
urlResuest.setValue(authValue, forHTTPHeaderField: "Authorization")
return urlResuest
})
requestOperation.setCompletionBlockWithSuccess( { (requestOperation: AFHTTPRequestOperation!, responseObject: AnyObject!) in
//requestOperation.response.statusCode
//requestOperation.responseString
}, failure: { (requestOperation: AFHTTPRequestOperation!, error: NSError!) in
//requestOperation.response.statusCode
//requestOperation.responseString
})
requestOperation.start()
ちなみにAlamofireの場合
https://github.com/Alamofire/Alamofire のREADME.md
CRUD & Authorizationの部分のようにして利用できるようです。