質問編集履歴

1 誤字の修正

退会済みユーザー

退会済みユーザー

2016/04/21 17:21  投稿

FuelPHPでAPIを叩いた時のステータスコードが400番台で404エラー
APIでユーザーIDとパスワードを検証してログインさせる機能を作っています。
APIはユーザーIDとパスワードが正しければステータスコード200を、間違えていればステータスコード400を返してきます。
200が返ってきた場合は問題なく動作するのですが、400が返ってきたときになぜか404エラーが表示されてしまします。
API単体での動作をFirefoxのアドオン「HTTP Requester」などでチェックすると、問題なく意図したとおりに動いていることを確認できます。
###ログインコントローラ
```php
class Controller_Login extends Controller
{
 private $fields = [
   'username',
   'password'
 ];
 public function action_index()
 {
   // 既にログイン済ならダッシュボードへ
   if (Auth::check())
   {
     Response::redirect('dashboard');
   }
   // バリデーションルール
   $val = Validation::forge();
   $val->add('username','ID')->add_rule('required');
   $val->add('password','パスワード')->add_rule('required');
   if (Input::method() === 'POST')
   {
     // 入力値をセッションに保持
     foreach ($this->fields as $field)
     {
       Session::set_flash($field, Input::post($field));
     }
     // バリデーションとCSFRトークンチェック
     if ($val->run() && Security::check_token())
     {
       $id = Input::post('username');
       $password = Input::post('password');
       // 認証API
       $auth = new Authentication();
       if ($auth->check($id, $password))
       {
         $user = Model_User::findFromUsername($id);
         if ($user)
         {
           Auth::force_login($user->id);
         }
         else
         {
           $user_id = Auth::create_user($id, Str::random('alnum', 16), Str::random('alnum', 16).'@example.com');
           Auth::force_login($user_id);
         }
         Auth::remember_me();
         Response::redirect('dashboard');
       }
       Session::set_flash('login.error', 'IDもしくはパスワードが違います。');
     }
   }
   return View::forge('login', [
     'val' => $val,
   ]);
 }
}
```
###APIアクセスクラス
```php
class Epark_Authentication
class Authentication
{
 /**
  * 認証APIへIDとパスワードを送る
  *
  * 認証が成功の場合true
  * 認証が失敗の場合false
  * を返す
  *
  * @param integer $id
  * @param string $password
  * @return boolean
  */
 public function check($id, $password)
 {
   $curl = Request::forge(API_URL, 'curl');
   $curl->set_method('post');
   $curl->set_params([
     'id' => $id,
     'password' => $password,
   ]);
   $curl->set_header('Content-Type', 'application/json');
   $curl->execute();
   $response = $curl->response();
   if ($response->status == 200)
   {
     return true;
   }
   return false;
 }
}
```
###API
```php
class Controller_Api extends Controller_Rest
{
 protected $format = 'json';
 public function post_auth()
 {
   $request = Input::json();
   if (!($request['id'] && $request['password']))
   {
     return $this->response([
       'message' => '失敗時メッセージ'
     ], 400);
   }
   if ($request['id'] === '0123456789' && $request['password'] === 'password')
   {
     return $this->response([
       'message' => '成功時メッセージ'
     ]);
   }
   return $this->response([
       'message' => '失敗時メッセージ'
     ], 400);
 }
}
```
どのようにすれば404エラーを表示させずにできるでしょうか?
よろしくお願いします。
  • PHP

    30615 questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • FuelPHP

    581 questions

    FuelPHPは、軽量高速で開発が可能なPHPのWebアプリケーションフレームワークです。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る