net :: ERR_CONNECTION_REFUSED Slim Framework

时间:2018-02-21 11:30:01

标签: php angularjs slim

所以就是这样。我在服务器上运行我的API,它在服务器中的localhost:8080中运行。 我被告知,为了从我的machinne本地访问api(使用vpn),网址是xxx.xxx.xxx:8080 所以我试过了

$http({
  url:'http://xxx.xxx.xxx.xxx:8080/login',
  method:"POST",
  data:{user:$scope.user, password:$scope.password}
})

我的api路线就像这样

$app->post('/login', function ($request, $response) {
  //Parametros que se pasan a la api
  $input  = $request->getParsedBody();
  $req = $input['usuario'];
  $md5pass = md5($input['password']);
  $sth = $this->db->prepare("query");
  //bindParam pasandole los parametros para evitar injecciones sql
  $sth->bindParam("password", md5($input['password']));
  $sth->bindParam("usuario", $input['usuario']);
  $sth->execute();
  $todos = $sth->fetchAll();
  $cliente_id = $todos->cliente_id;
   ....

但是我从chrome

得到了这个错误
OPTIONS http://xxx.xxx.xxx.xxx:8080/login net::ERR_CONNECTION_REFUSED

任何想法可能是什么?我是否需要将设置更改为我的Slim配置或其他内容?

1 个答案:

答案 0 :(得分:0)

这是一个所谓的:CORS Preflight request

您可以尝试添加此小型中间件以允许所有预检请求。当然,您应该添加自己的安全逻辑。

// CORS preflight middleware
$app->add(function (Request $request, Response $response, $next) {
    if ($request->getMethod() !== 'OPTIONS' || php_sapi_name() === 'cli') {
        return $next($request, $response);
    }

    $response = $next($request, $response);

    $response = $response->withHeader('Access-Control-Allow-Origin', '*');
    $response = $response->withHeader('Access-Control-Allow-Methods', $request->getHeaderLine('Access-Control-Request-Method'));
    $response = $response->withHeader('Access-Control-Allow-Headers', $request->getHeaderLine('Access-Control-Request-Headers'));

    return $response;
});