#はじめに
アプリを開発する中でテストでAPIを叩ける環境がBasic認証のかかったサーバーしかなかったので
その時に行った作業をメモ
#iOSからpostする
Alamofireというライブラリを使ってHttp通信をする
Cocoapodsでいれますが、そこは割愛
環境
swift 3.0
Almofire 4.4 ?
xcode 8.3
iOS側の作業
- ストーリーボードにボタンを設置
- ViewController.swiftにIBActionを追加
- ボタンを押すとpostするよ
import Alamofire
@IBAction func emailLogin(_ sender: UIButton) {
let user = "user"
let pass = "pass"
Alamofire.request("https://dev.myapp.jp/app_login", method: .post)
.authenticate(user: user, password: pass)
.responseJSON { response in
print(response)
}
}
こんな感じでpostする側の準備はOK
サーバー側でpostされる
##環境
Nginx
PHP5.6
Laravel5.1
第一関門
TokenMismatchException
VerifyCsrfTokenというMiddlewareでcsrf_tokenの整合性をみているのでそのへんで出るエラー
http://qiita.com/rana_kualu/items/3f9d0d6b9a363fd2108e#verifycsrftoken
こちらの記事を参考に
public function handle($request, Closure $next)
{
return $this->addCookieToResponse($request, $next($request));
・・・
で返してやる。これでOK
本当は全然OKじゃないけど、
一旦postしてresponseを返すところをやりたいだけなので一旦このまま
あとでこのへんの対策はちゃんとやります
第二関門
サーバー側でエラーがでないけどResponseはエラーが返ってくる・・
既存のfunctionを使っていたのでよく見たらFormRequestで制約がかかっていた
public function login(PostRequest $request)
{
・・・
}
class AuthPostRequest extends Request
{
・・・
public function rules()
{
return [
'login_email' => 'required|email',
'login_password' => 'required',
];
}
・・・
}
なのでここも一旦コメントアウトだ!
class AuthPostRequest extends Request
{
・・・
public function rules()
{
return [
// 'login_email' => 'required|email',
// 'login_password' => 'required',
];
}
・・・
}
これでOK
その後
結局API的な動きをする処理を書くので新しくFormRequestの制約なしの新しいfunctionを書き直しました
なので、↑のコメントアウトはしなくてOK
public function appLogin()
{
return json_encode("Login!!");
}
その代わり route.php に
Route::post('app_login', ['as' => 'web.auth.app_ogin', 'uses' => 'AuthCont
roller@appLogin']);
みたいな感じのを追加してあげました
できた
デザインがクソみたいなのは気にしないようにお願いします
動画小さすぎて全然見えないけど SUCCESS: Login!!
って出ています
とりあえずpostしてレスポンスが返ってきたので成功だっ