Chciałbym wiedzieć, jak wymusić HTTPS (SSL) w akcji kontrolera Yii.Kontroler Yii Force HTTPS
Odpowiedz
Spójrz na ten artykuł http://www.yiiframework.com/forum/index.php/topic/25407-forcing-https-in-yii/
class HttpsFilter extends CFilter {
protected function preFilter($filterChain) {
if (!Yii::app()->getRequest()->isSecureConnection) {
# Redirect to the secure version of the page.
$url = 'https://' .
Yii::app()->getRequest()->serverName .
Yii::app()->getRequest()->requestUri;
Yii::app()->request->redirect($url);
return false;
}
return true;
}
}
I nawet this więcej szczegółów.
Kod:
private static $secureRoutes = array('site/login'=>'',);
public function filterAccessControl($filterChain) {
if(!Yii::app()->getRequest()->isSecureConnection && array_key_exists($filterChain->controller->route, self::$secureRoutes)){
$this->redirect($this->createAbsoluteUrl($filterChain->controller->route, array(), 'https'));
return false;
}
else if(Yii::app()->getRequest()->isSecureConnection && !array_key_exists($filterChain->controller->route, self::$secureRoutes)){
$this->redirect($this->createAbsoluteUrl($filterChain->controller->route, array(), 'http'));
return false;
}
}
Jeśli tylko chcesz zastosować https wymusić na swojej całej aplikacji, który jest to, co potrzebne, można umieścić to w swoim chronionych/podzespołów/Controller.php:
public function beforeAction($action) {
if(! Yii::app()->getRequest()->isSecureConnection) {
$url = 'https://' .
Yii::app()->getRequest()->serverName .
Yii::app()->getRequest()->requestUri;
Yii::app()->request->redirect($url);
return false;
}
}
To jest bardziej przejrzyste rozwiązanie niż filtry, jeśli potrzebujesz https w całym serwisie, ponieważ przy filtrach musisz zastosować array_merge z kontrolerem nadrzędnym we wszystkich tworzonych kontrolerach podrzędnych. Jeśli przegapisz jedną, żadna siła https dla tego kontrolera. Niewielką wadą tego jest to, że jest wywoływana po wywołaniu filtrów, co oznacza, że wykonano więcej przetwarzania niż zwykle chcemy przed przekierowaniem.
Jeśli potrzebujesz tego na kontrolerze według kontrolera lub akcji według działania, filtry są tym, czego szukasz.
- 1. Jak ustawić domyślny kontroler w Yii
- 2. Yii Kontroler nie może znaleźć żądanego widoku
- 3. session_regenerate_id() - nagłówki już wysłane w testowaniu jednostkowym Kontroler Yii
- 4. gdzie możemy określić domyślny kontroler i akcję w yii
- 5. Jak skonfigurować platformę Yii do korzystania z HTTPS?
- 6. force scrollbar w Safari
- 7. ostrzeżenie force w java
- 8. Wywołanie metody Force base
- 9. force download image base64
- 10. Aktualizacja wiązania Force Silverlight
- 11. Force Pobierz plik CSV
- 12. JavaFX force recompute binding
- 13. Elastyczność Yii
- 14. Yii generuje błąd "Nie można rozwiązać żądania <kontroler/akcja>"
- 15. Niepoprawna konfiguracja - yii \ base \ InvalidConfigException
- 16. Aktualizacja D3 Force Directed Graph ajax
- 17. D3 v4 Force Simulation "zgrupowane"
- 18. Przeładuj konfigurację Force w Symfony2
- 19. Podstawy D3 Force reżyserii Układ
- 20. Android wake lock force close
- 21. Antisamy parser force tag zamykający
- 22. Notacja frakcji LaTeX force slash
- 23. YouTube iframe embed: force Flash?
- 24. Co robi "Force" w Unecrustify?
- 25. FlowDocument Force a PageBreak (BreakPageBefore)
- 26. Python Wheel Force ABI "none"
- 27. Yii framework - co to jest plik ".yii" w niektórych folderach
- 28. Jak uaktualnić Yii 1.x do Yii 2.0
- 29. co to jest Yii :: app() w php framework yii
- 30. jak przekazać parametr przekierowania w Yii
Mam problem, że po HTTPS cała moja witryna pozostaje HTTPS. Czy uważasz, że dobrze jest stworzyć HttpFilter? –
Powiedziałeś, że musisz wymusić HTTPS. Moje rozwiązanie działa. Czy musisz wymuszać HTTPS tylko dla określonych działań kontrolera? –
Tylko dla kontrolera UserController i innych kontrolerów powinno być http. Kiedy jestem w HTTPS wszystkie strony pozostają https. –