プログラミングと時々コロッケ

プログラミングと時々コロッケ

高専生がメモも兼ねてプログラミングの記録をします。

Amebaでブログを始めよう!
こんばんは。お久しぶりです。

ワールドカップ初戦も終わり、次の試合が待ち遠しいこの頃です。
このブログも本当は毎日更新したいのですが、最近睡魔に襲われる時間が早かったため、なかなか更新できませんでした。(申し訳ない)

というわけで、またまた技術的な記事になるけど、今回は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です。

いかに実行結果を載せておきます。

アプリ全体
basic認証テストアプリ画面

ログ(認証失敗)
basic認証テストアプリログ(認証失敗)

ログ(認証成功)
basic認証テストアプリログ(認証成功)

認証完了時にゲットしたページをtextViewに表示
basic認証成功後のページをtextViewに出力


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

cakephpの罠

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


これ