2016-08-15 1 views
1

Эй, ребята, у меня возникли проблемы с Slim Middleware.Тонкий пост метод перенаправления не работает с slim Middleware

Я создал промежуточное программное обеспечение, которое проверяет, зарегистрирован ли пользователь в Facebook и имеет конкретный адрес электронной почты. Итак, теперь, когда я вызываю URL-адрес с помощью инструмента тестирования PHPStorm RESTful, я не могу отправлять данные на сервер ... Но перенаправление не работает, поэтому я могу отправлять данные на сервер.

/** 
* Admin Middleware 
* 
* Executed before /admin/ route 
*/ 
$adminPageMiddleware = function ($request, $response, $next) { 
    FBLoginCtrl::getInstance(); 
    $user = isset($_SESSION['user']) ? $_SESSION['user'] : new User(); 
    if (!($user->getEmail() == ADMIN_USER_EMAIL)) { 
     $response = $response->withRedirect($this->router->pathFor('login'), 403); 
    } 
    $response = $next($request, $response); 
    return $response; 
}; 

/** 
* Milestone POST Method 
* 
* Create new Milestone 
*/ 
$app->post('/admin/milestone', function (Request $request, Response  $response) use ($app) { 
    $milestones = $request->getParsedBody(); 
    $milestones = isset($milestones[0]) ? $milestones :  array($milestones); 
    foreach ($milestones as $milestone) { 
     $ms = new Milestone(); 
     $msRepo = new MilestoneRepository($ms); 
     $msRepo->setJsonData($milestone); 
     if (!$msRepo->createMilestone()) { 
      return $response->getBody()->write("Not Okay"); 
     }; 
    } 
    return $response->getBody()->write("Okay"); 
})->add($adminPageMiddleware); 

Так может ли кто-нибудь дать мне подсказку, в чем проблема? Я попытался добавить одно и то же промежуточное ПО для получения маршрута ... там он работает:/Странные вещи.

+0

На сессии создается после того, как пользователь щелкает Войти с Facebook, и он перенаправляется на Facebook-PHP- SDK –

ответ

1

Проблема в логике промежуточного программного обеспечения.

if (!($user->getEmail() == ADMIN_USER_EMAIL)) { 
    return $response->withRedirect($this->router->pathFor('login'), 403); //We do not want to continue execution 
} 
$response = $next($request, $response); 
return $response; 
+0

Хмм, почему? Я создаю объект пользователя с данными из fb sdk, и в нем есть аддикат электронной почты, поэтому это условие истинно. И такое же промежуточное программное обеспечение работает как excpectet, когда я добавляю его в маршрут получения. –

+0

ваш ответ будет перезаписан, когда вы вызовете $ next() – geggleto

+0

Эй, спасибо, я получил его сейчас, я не видел возврата в ваших отрезанных. –

0

Так что теперь я закончил с этим кодом:

class AdminRouteMiddleware 
 
{ 
 
    public function __invoke($request, $response, $next) 
 
    { 
 
     FBLoginCtrl::getInstance(); 
 
     $user = isset($_SESSION['user']) ? $_SESSION['user'] : new User(); 
 
     if (!($user->getEmail() == ADMIN_USER_EMAIL)) { 
 
      if ($_SERVER['REQUEST_METHOD'] == "GET") { 
 
       $response = $response->withRedirect('/login', 403);//want to use the route name instead of the url 
 
      } else { 
 
       $response->getBody()->write('{"error":Access Denied"}'); 
 
      } 
 
     } else { 
 
      $response = $next($request, $response); 
 
     } 
 
     return $response; 
 
    } 
 
} 
 

 

 

 
/** 
 
* Milestone POST Method 
 
* 
 
* Create new Milestone 
 
*/ 
 
$app->post('/admin/milestone', function (Request $request, Response  $response) use ($app) { 
 
    $milestones = $request->getParsedBody(); 
 
    $milestones = isset($milestones[0]) ? $milestones :  array($milestones); 
 
    foreach ($milestones as $milestone) { 
 
     $ms = new Milestone(); 
 
     $msRepo = new MilestoneRepository($ms); 
 
     $msRepo->setJsonData($milestone); 
 
     if (!$msRepo->createMilestone()) { 
 
      return $response->getBody()->write("Not Okay"); 
 
     }; 
 
    } 
 
    return $response->getBody()->write("Okay"); 
 
})->add(new AdminRouteMiddleware());

 Смежные вопросы

  • Нет связанных вопросов^_^