Mam operację, która pobiera dane POST zabezpieczone przez sfGuard. Oznacza to, że jeśli użytkownik nie jest zalogowany, dane POST zostaną wysłane do formularza logowania. Zazwyczaj nie stanowi to problemu, użytkownik nadal loguje się i musi ponownie przesłać dane.Wysyłanie żądania POST do zabezpieczonej akcji
Niestety, formularz logowania wydaje się używać danych POST, jak gdyby został złożony w samym formularzu. Oznacza to, że narzeka, że brakuje wymaganych pól nazwy użytkownika i hasła, i narzeka, że brakuje tokenu CSRF. Ten ostatni problem nie znika, po przesłaniu formularza, co oznacza, że użytkownik nie może się zalogować.
Użytkownik nie powinien otrzymać formularza, jeśli nie jest zalogowany, ale użytkownik może się wylogować, ponieważ formularz jest nadal otwarty. Dlatego proszę o zachowanie szczelności interfejsu i bezbłędności.
Czy to jest wada sfGuarda, czy można tego uniknąć, czy też robię coś złego?
Aby wyjaśnić, trasa wygląda następująco:
add_subgroup:
url: /group/:id/add
class: sfPropelRoute
options:
model: Group
type: object
param: { module: subgroups, action: create }
requirements:
group_id: \d+
sf_method: [post]
Formularz wykorzystany do złożenia wniosku jest następująca:
<form action="<?php echo url_for('add_subgroup', $group) ?>" method="post">
<input type="hidden" name="group_id" value="<?php echo $group->getId() ?>" />
<input type="text" name="subgroup_id" />
<input type="submit" class="button" value="Add" />
</form>
można być bardziej szczegółowe starasz się zrobić formularz logowania, czy co? – Henry
Próbuję wywołać zabezpieczoną akcję. Jeśli użytkownik nie jest zalogowany, przechodzi do istniejącego formularza logowania. Ponieważ akcja wymaga danych POST, dane POST zakłócają formę. Czy możesz dokładniej określić, o czym powinienem się bardziej szczegółowo zastanowić? – Druckles
Jak sobie radzisz, jeśli użytkownik nie jest zalogowany? Jeśli wydasz przekierowanie nagłówka, dane POST powinny zostać wyczyszczone. jeśli zamiast tego włączysz to, dane POST będą obecne. –