向我的API请求AngularJS时出错

向我的API请求AngularJS时出错,angularjs,rest,symfony,Angularjs,Rest,Symfony,我有一个关于我自己的API请求的问题。。。问题是当我在localhost中进行请愿时,一切正常,但当我尝试在我的生产环境中进行请求时,我总是得到403 我认为是关于头球的问题,但我不知道是什么错了 我的Api是在Symfony 2中使用FOS RestBundle开发的 提前感谢!:) 编辑 下面是API登录的AngularJS代码 // Main Controller .controller("LoginController", ["$scope", "$http", "CONFIG"

我有一个关于我自己的API请求的问题。。。问题是当我在localhost中进行请愿时,一切正常,但当我尝试在我的生产环境中进行请求时,我总是得到403

我认为是关于头球的问题,但我不知道是什么错了

我的Api是在Symfony 2中使用FOS RestBundle开发的

提前感谢!:)

编辑

下面是API登录的AngularJS代码

// Main Controller
    .controller("LoginController", ["$scope", "$http", "CONFIG", function ($scope, $http, CONFIG) {
        // Login access
        $scope.login = function () {
            $http.post(CONFIG.APIURL + '/access/', {
                email: $scope.user.email,
                passwd: $scope.user.passwd
            }).then(function successCallback(response) {
                console.log(response.data);
                $scope.logged = 'Logged In!';
                //redirect to customers
            }, function errorCallback(err) {
                //show error
                console.log(err.data);
                alert('Email or Password incorrect...');
            });

        };
restbundle的API config.yml:

fos_rest:
    format_listener:
          rules:
              - { path: ^/api/, priorities: [ json ], fallback_format: ~, prefer_extension: true }
              - { path: ^/, priorities: [ 'html', '*/*'], fallback_format: ~, prefer_extension: true }
    routing_loader:
        default_format: json
    param_fetcher_listener: true
    view:
        view_response_listener: 'force'
        formats:
            json: true
        templating_formats:
            html: true
以及控制器:

/**
 * @return array
 * @Rest\Post("/access/")
 * @Rest\View
 */
public function loginApiAction(Request $request)
{
    $session = $request->getSession();

    $email = $request->get('email');
    $passwd = $request->get('passwd');

    $user = $this->getDoctrine()->getRepository('OurentecBundle:User')->findOneBy(array(
        'email' => $email,
        'passwd' => Utils::getHash('sha1', $passwd, HASH_KEY)
    ));

    if ($user) {
        $session->set('auth', true);
        $session->set('user_id', $user->getId());
        $session->set('username', $user->getUsername());
        $session->set('email', $user->getEmail());

        $response = array('status' => 200, 'message' => 'Login OK');
        return new JsonResponse($response, 200);
    }

    $response = array('status' => 401, 'message' => 'Email or password incorrect');
    return new JsonResponse($response, 401);
}
编辑2: 嗯,我试过用Nelmio CORS,但还是没用

Nelmio配置:

nelmio_cors:
    defaults:
        allow_credentials: false
        allow_origin: []
        allow_headers: []
        allow_methods: []
        expose_headers: []
        max_age: 0
        hosts: []
        origin_regex: false
    paths:
        '^/api/v1/':
            allow_origin: ['*']
            allow_headers: ['Origin', 'X-Requested-With', 'Content-Type', 'Accept']
            allow_methods: ['POST', 'GET']
            max_age: 3600
请求结果:

MacBook-Pro-de-Juan:Ourentec wilde$ http http://localhost/Ourentec/web/app_dev.php/api/v1/customers/11
HTTP/1.1 403 Forbidden
Cache-Control: no-cache
Connection: Keep-Alive
Content-Length: 36
Content-Type: application/json
Date: Sat, 28 Nov 2015 18:25:34 GMT
Keep-Alive: timeout=5, max=100
Server: Apache/2.2.29 (Unix) mod_fastcgi/2.4.6 mod_wsgi/3.4 Python/2.7.8 PHP/5.6.2 mod_ssl/2.2.29 OpenSSL/0.9.8zg DAV/2 mod_perl/2.0.8 Perl/v5.20.0
Set-Cookie: PHPSESSID=595d96a9f15ed67fc18a7a5dd3c75992; path=/
X-Debug-Token: 5e025e
X-Debug-Token-Link: /Ourentec/web/app_dev.php/_profiler/5e025e
X-Powered-By: PHP/5.6.2

{
    "message": "Forbidden", 
    "status": 403
}
编辑3: 我使用jQuery“
$.param()
”发送数据并更改标题配置“
'Content-Type':'application/x-www-form-urlencoded;charset=UTF-8'
”解决了登录问题


你需要在这里输入一些代码,或者至少详细说明一下。例如,您的客户端和API是否在同一个域上?确定。让我更新$http请求,我的Symfony REST配置ASAPquestion不清楚。展望未来,如果你需要发送跨域请求,那么你需要在之前发送。代码更新我会尝试你的建议Sergio:)你需要在这里添加一些代码,或者至少详细说明一下。例如,您的客户端和API是否在同一个域上?确定。让我更新$http请求,我的Symfony REST配置ASAPquestion不清楚。展望未来,如果您需要发送跨域请求,那么您需要在之前发送。代码已更新我将尝试您的建议Sergio:)
// Login access
        $scope.login = function () {
            var req = {
                method: 'POST',
                url: CONFIG.APIPROD + '/access/',
                headers: {
                    'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
                },
                data: $.param({
                    email: $scope.user.email,
                    passwd: $scope.user.passwd
                })
            };
            $http(req).then(function successCallback(response) {
                console.log(response.data);
                $scope.logged = 'Logged In!';
                //redirect to customers
            }, function errorCallback(err) {
                //show error
                console.log(err.data);
                alert('Email or Password incorrect...');
            });