질문 Q #22280
CI4 RESTful 관련 문의 드립니다.
꺼노 2020-03-30 16:43:28

안녕하세요.

 

RESTful API 만들어 보려고 하고 있습니다.

헌데, Postmen 에서 PUT, PATCH, DELETE 부분에서 403 Forbidden 으로 접근을 하지 못하고 있습니다.

GET / POST 는 연결은 잘 됩니다.

 

개발은 코드이그나이터 4 문서 보고 진행했습니다.

http://ci4doc.cikorea.net/incoming/restful.html

 

제가 생각하지 못하고 있는 부분이 있는것인지.. 궁금합니다.

아래 소스 붙여 넣었습니다.

실력자 분들 도와주시면 감사드리겠습니다. ㅜㅜ

 

 

Routes.php


$routes->resource('users');


// Controller is \Users
$routes->add('users', 'Users::index');

// // Equivalent to the following:
$routes->get('users/new',               'Users::create');
$routes->post('users',                  'Users::create');
$routes->get('users',                   'Users::index');
$routes->get('users/(:segment)',        'Users::show/$1');
$routes->put('users/(:segment)',        'Users::update/$1');
$routes->patch('users/(:segment)',      'Users::update/$1');
$routes->delete('users/(:segment)',     'Users::delete/$1');

 

 

Users.php


<?php namespace App\Controllers;

use CodeIgniter\API\ResponseTrait;
use CodeIgniter\RESTful\ResourceController;

class Users extends ResourceController
{
    use ResponseTrait;

    public function index()
    {
        return $this->respond([[1]]);
    }

    public function show($id = null)
    {
        return $this->respond(['id' => $id]);
    }

    public function create()
    {
        return $this->respondCreated(['id' => 'x']);
    }

    public function update($id = null)
    {
        return $this->respond(['up' => $id]);
    }

    public function delete($id = NULL)
    {
        return $this->respondDeleted($id);
    }

}

?>

 

답변 7
#1 변종원(웅파) 2020-03-30 16:56:52

toolbar 켜서 다시 테스트 해보시겠어요?

get, post는 작동하는 거면 웹서버단의 403은 아니고 ci4에서 그렇게 처리하는건데요.

#2 꺼노 2020-03-30 17:06:21

답변 감사합니다.

웹프라우져에서는 작동이 됩니다.

PUT / PATH / DELETE 를 사용하고 싶은데, 제가 하는 방식이 틀린 것인가요?

문서에 보면, 저리 하면 연결이 되는 것으로 보이는데, POSTMAN 으로 오류가 나니 난감합니다.

#3 꺼노 2020-03-31 09:01:00

자답입니다.

403은 권한이 없다고 나오는 부분입니다.

GET POST는 가능하고 PUT / PATCH / DELETE 는 권한이 없는 부분은 APACHE / NGINX 에서 권한을 GET / POST 만 주어서 생기는 문제입니다.

저는 APACHE 2.4 를 쓰고 있어서.. CI4 public 디렉토리에 .htaccess 제일 하단에 아래 처럼 추가해주시면 해결이 됩니다.

참고로 2.2 는 

Order Allow,Deny
Allow from all

<Limit GET HEAD POST PUT DELETE OPTIONS>
Require all granted
</Limit>

CI4 쪽만 생각하고 있다보니, 다른쪽은 생각하지도 못했었습니다.

다른 분들께 참고 되시면 좋겠습니다.

감사합니다.

#4 변종원(웅파) 2020-04-01 16:21:52

해결되서 다행이지만 이해가 안되는 부분이 있네요. 웹브라우저에서 됐다면 아파치 문제가 아니거든요.

서버단 문제라면 웹브라우저에서도 안되고  포스트맨에서도 안되야 정상입니다. ^^

#5 꺼노 2020-04-02 14:41:23

안녕하세요.

웹브라우져에서는 get / post 로만 작동이 되고 있었습니다.

PUT / PATH / DELETE 는 작동은 하지 않고요.

권한을 주니 작동이 되었습니다.

 

지금은 또 다른 문제에 ㅜㅜ

"message": "Allowed fields must be specified for model: App\\Models\\UsersModel",
 
검색을 해도 어찌 안나오는지.. Allowd fields 는 디비에 들어 가는 값을 다 넣어놨는데 .. ㅜㅜ
보안 문제일까요?
#6 변종원(웅파) 2020-04-02 16:01:26

소스 없이 답변하기 힘듭니다. (천리안이 아니기에..) 어떤 액션을 했을때 저런 메세지가 나오는지 어떤 소스인지 올리셔야 답을 합니다.

https://www.cikorea.net/bbs/view/qna?idx=15338&page=1&view_category=&lists_style= 2, 3, 4번 읽어보시고 다시 올리세요. ^^

#7 꺼노 2020-04-02 18:35:38
아 죄송합니다. 정리해서 올리겠습니다.