LoginSignup
18
19

More than 5 years have passed since last update.

Swift,AFNetworkingでQiitaAPIv2の認証

Last updated at Posted at 2015-02-14

認証から利用までの流れ

  1. https://qiita.com/settings/applications でアプリを登録し、Client ID, Client Secretを利用します。

  2. このような認証URLをUIWebViewで表示する
    https://qiita.com/api/v2/oauth/authorize?client_id=***&scope=***

  3. リダイレクトURLの例
    http://qiita.com/roana0229?code=xxx

  4. 上記の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の部分のようにして利用できるようです。

18
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
19