it-swarm.com.de

Wie debugge 404 unter Benutzer / Login-Benutzer / Benutzer registrieren / Abmelden?

Ich habe eine Drupal 8-Site auf 8.4.2. Wenn ich sie auf 8.5.1 aktualisiere, werden nach dem Ausführen der Datenbankaktualisierungen die Pfade /user/register, /user/login, und /user/logout einen 404 zurückgeben.

  • Ich kann mich mit Drush anmelden (drush uli myuser), so dass es möglich ist, sich tatsächlich anzumelden, aber die Anmeldeseite wird nicht angezeigt.
  • Ich habe versucht, meine benutzerdefinierten Module zu deinstallieren, aber das Problem besteht weiterhin.
  • Ich sah /admin/reports/dblog, aber es heißt nur "Seite nicht gefunden" als Fehler für /user/login.

Dieses Frage zu einem ähnlichen Problem wurde als Off-Topic geschlossen, weil es zu spezifisch war; Meine Frage lautet: "Wie kann ich das debuggen?" nicht "Was ist die Ursache meines Problems?"

3
Patrick Kenny

@ AndrewKillen:

Wird bei Devel überprüft und es wird "Route für URL '/ user/login' kann nicht geladen werden" angezeigt, wenn die Route user.login überprüft wird.

Wie dies debuggt werden könnte (an einem funktionierenden Beispiel, weil ich keine kaputte Site habe):

Aktivieren Sie Xdebug und rufen Sie die URL auf:/devel/route/item? Path =/user/login

Drupal\devel\Controller\RouteInfoController :: routeDetail :

  public function routeDetail(Request $request, RouteMatchInterface $route_match) {
    $route = NULL;

    // Get the route object from the path query string if available.
    if ($path = $request->query->get('path')) {
      try {
        $route = $this->router->match($path);

Setzen Sie einen Haltepunkt für die letzte Zeile und gehen Sie zu match($path). Nachdem eine neue Anfrage mit den Pfadinformationen erstellt wurde, gelangen Sie zu:

Router :: matchRequest :

  public function matchRequest(Request $request) {
    $collection = $this->getInitialRouteCollection($request);
    if ($collection->count() === 0) {
      throw new ResourceNotFoundException(sprintf('No routes found for "%s".', $this->currentPath->getPath()));
    }
    $collection = $this->applyRouteFilters($collection, $request);

    if ($ret = $this->matchCollection(rawurldecode($this->currentPath->getPath($request)), $collection)) {
      return $this->applyRouteEnhancers($ret, $request);
    }

getInitialRouteCollection() führt zu drei möglichen Übereinstimmungen:

  • benutzer-Anmeldung
  • user.login.http
  • entity.user.canonical

Die zweite wird in applyRouteFilters() gefiltert, da dies POST nur und für JSON) ist. Die Entitätsroute wird entfernt, nachdem die kompilierten Routen in matchCollection() abgeglichen wurden weil "login" kein gültiger Benutzer ist.

Die Route user.login ist also die letzte verbleibende und zurückgegebene. Wenn nicht, müssen Sie überprüfen, wo auf diesem Weg die Route nicht gesammelt oder herausgefiltert wird.

4
4k4