Einfaches login-Formular in Symfony2
Ich habe auf der Suche für die Lösung aber nicht finden konnte alle Antworten, die mein problem beheben würde. Ich habe die einfachste form, login ( immer noch lernen, symfony2 ) und ich habe keine Idee warum es nicht funktioniert.
Meine Sicherheit.yml
security:
encoders:
Symfony\Component\Security\Core\User\User: plaintext
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
providers:
in_memory:
memory:
users:
user: { password: userpass, roles: [ 'ROLE_USER' ] }
admin: { password: adminpass, roles: [ 'ROLE_ADMIN' ] }
firewalls:
secured_area:
pattern: ^/profile
provider: in_memory
form_login:
check_path: _security_check
login_path: _portal_login
username_parameter: _username
password_parameter: _password
access_control:
- { path: ^/profile, roles: ROLE_ADMIN }
Meine DefaultController :
class DefaultController extends Controller
{
/**
* @Route("/login", name="_portal_login")
* @Template()
*/
public function indexAction(Request $request)
{
$request = $this->getRequest();
$session = $request->getSession();
//get the login error if there is one
if ($request->attributes->has(SecurityContext::AUTHENTICATION_ERROR)) {
$error = $request->attributes->get(
SecurityContext::AUTHENTICATION_ERROR
);
} else {
$error = $session->get(SecurityContext::AUTHENTICATION_ERROR);
$session->remove(SecurityContext::AUTHENTICATION_ERROR);
}
return array(
'last_username' => $request->getSession()->get(SecurityContext::LAST_USERNAME),
'error' => $error
);
}
/**
* @Route("/login_check", name="security_check")
*/
public function securityCheckAction()
{
}
/**
* @Route("/profile", name="profile_main")
* @Template()
*/
public function profileAction()
{
return array();
}
}
und Blick auf meine login-Formular
{% if error %}
<div>{{ error.message }}</div>
{% endif %}
<form action="{{ path("security_check") }}" method="post" id="login">
<label for="username">Username:</label>
<input type="text" id="username" name="_username" value="{{ last_username }}" />
<label for="password">Password:</label>
<input type="password" id="password" name="_password" />
<button type="submit">login</button>
</form>
Wie gesagt - so einfach wie es sein kann, und nach dem Klick auf "login" bekomme ich Ausnahme:
The controller must return a response (null given). Did you forget to add a return statement somewhere in your controller?
BEARBEITEN !!!!
NUR EINE LÖSUNG GEFUNDEN:
Müssen Sie Sicherheit Bearbeiten.yml also Anbieter ist in form_login Abschnitt ^^
InformationsquelleAutor mmmm | 2013-10-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
versuchen, diesen code in einer controller -
IN Sicherheit.yml
Bitte schauen Sie die Seite klicken Sie Hier
InformationsquelleAutor GOPI
Haben Sie angegeben, dass nur Dinge, die das Leben unter "/profile" sollte durch die Firewall geschützt ist. Ändern Sie das Muster:
Erfordern Authentifizierung und Autorisierung für die gesamte app. Oder
Wird eine Authentifizierung und Autorisierung erfordern nur für Routen, die live unter /Admin.
Du nicht posten Sie Ihre routing.yml-Datei, aber Sie werden wahrscheinlich brauchen, um Ihre routing.yml-Datei:
Dann würde ich umbenennen DefaultController zur Authentifizierung, da das ist, was Ihr wirklich tut.
InformationsquelleAutor Dan Morphis
Lesen Sie, wie Sie mithilfe von Vorlagen Anmerkung hier. Oder ändern Sie Ihren return-Anweisung:
Lesen Sie über die Vorlage Benennen und Standorte hier
Jeder controller muss return Response-Objekt, es sei denn, Ihre app hört Ansicht, Ereignis - und das ist der Fall, wenn Sie die Vorlage verwenden annotation. Also entweder Sie kehren Reaktion oder eine Vorlage verwenden. BTW: tun Sie die Vorlage importieren (use Sensio\Bundle\FrameworkExtraBundle\Configuration\ - Template)?
Ich habe bearbeitet Sie meine Antwort, als ich einen Fehler gemacht. $dies->render() gibt Antwort-Objekt (indirekt, also brauchen Sie nicht zu verwenden Response-Klasse)
InformationsquelleAutor biera