ワールドカップ初戦も終わり、次の試合が待ち遠しいこの頃です。
このブログも本当は毎日更新したいのですが、最近睡魔に襲われる時間が早かったため、なかなか更新できませんでした。(申し訳ない)
というわけで、またまた技術的な記事になるけど、今回はNSURLSessionを使ってbasic認証をしてみようと思う。
結構簡単にできるので気楽に見て欲しい
初めにソースコード。
前回のソースを次のように変更しました。
これ
これ
やってることは単純でtryBasicボタンを押すとURLSessionDemoのusernameとpasswordをセットし、tryBasicAuthenticationを実行します。
tryBasicAuthenicationの中ではbasic認証があるページにgetリクエストを投げけるだけです。
あれ?肝心のbasic認証をしてないのでは?と思うかもしれません。
じつは、
-(void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition, NSURLCredential *))completionHandler
で、リクエスト先にベーシック認証があった際にこの関数が実行されるわけです。
これは、NSURLSessionTaskDelegateの関数です。
ここで、basic認証をこのように行えばokです。
いかに実行結果を載せておきます。
アプリ全体

ログ(認証失敗)

ログ(認証成功)
認証完了時にゲットしたページをtextViewに表示

P.S.
サーバーサイドプログラミングで
今回のbasic認証サンプルプログラムでのサーバーサイドはcakephpでつくりました。
cakeでは認証用のコンポーネントが用意されており、form認証、basic認証、digest認証の三つに対応してます。
...というのは嘘?でして、最新版のcakephpでは僕が試したところ、basic認証、digest認証はcakephpのバグにより、コンポーネントがうまく動作してくれませんでした。

そのため、今回は次のようにしてbasic認証を実装しました。
その例を以下にあげときます。
これ
