LoginSignup
2
5

More than 5 years have passed since last update.

iOSアプリからBasic認証のかかったLaravelのWebアプリにpostする(開発環境)

Last updated at Posted at 2017-04-27

はじめに

アプリを開発する中でテストでAPIを叩ける環境がBasic認証のかかったサーバーしかなかったので
その時に行った作業をメモ

iOSからpostする

Alamofireというライブラリを使ってHttp通信をする
Cocoapodsでいれますが、そこは割愛

環境

swift 3.0
Almofire 4.4 ?
xcode 8.3

iOS側の作業

  1. ストーリーボードにボタンを設置
  2. ViewController.swiftにIBActionを追加
  3. ボタンを押すとpostするよ
ViewCotroller.swift
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 :ok_woman_tone3:

サーバー側で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_woman_tone3:

:warning: 本当は全然OKじゃないけど、
一旦postしてresponseを返すところをやりたいだけなので一旦このまま
あとでこのへんの対策はちゃんとやります

第二関門

サーバー側でエラーがでないけどResponseはエラーが返ってくる・・
既存のfunctionを使っていたのでよく見たらFormRequestで制約がかかっていた

public function login(PostRequest $request)
{
    ・・・
}
PostRequest.php
class AuthPostRequest extends Request
{

   ・・・

   public function rules()
    {
        return [
            'login_email'    => 'required|email',
            'login_password' => 'required',
        ];
    }

    ・・・


なのでここも一旦コメントアウトだ!

PostRequest.php
class AuthPostRequest extends Request
{

   ・・・

   public function rules()
    {
        return [
//            'login_email'    => 'required|email',
//            'login_password' => 'required',
        ];
    }

    ・・・


これでOK :ok_woman_tone3:

:sunny:その後

結局API的な動きをする処理を書くので新しくFormRequestの制約なしの新しいfunctionを書き直しました
なので、↑のコメントアウトはしなくてOK

AuthController.php
public function appLogin()
{
    return json_encode("Login!!");
}

その代わり route.php に

route.php
Route::post('app_login', ['as' => 'web.auth.app_ogin', 'uses' => 'AuthCont
roller@appLogin']);

みたいな感じのを追加してあげました:innocent::relaxed:

できた

emailLoginAnime.gif
:warning:デザインがクソみたいなのは気にしないようにお願いします
動画小さすぎて全然見えないけど SUCCESS: Login!! って出ています

とりあえずpostしてレスポンスが返ってきたので成功だっ:relaxed:

2
5
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
2
5