Dva: So führen Sie eine globale Verwaltung des Anmeldestatus durch

Erstellt am 19. Sept. 2016  ·  25Kommentare  ·  Quelle: dvajs/dva

Prüfen Sie, ob Sie eingeloggt sind:

  • Beim Seitenwechsel (kann man in jedem Subrouter nur onEnter={isLogin} machen?) wie folgt:
<Router history={history}>
      <Route path="/" component={MainLayout} onEnter={isLogin}>
        <IndexRoute component={User} />
        <Route path='tag' component={Tag} />
      </Route>
    <Route path="/login" component={Login} />
    <Route path="*" component={NotFound} />
</Router>
不能直接在父路由上加onEnter,所有的子路由都生效么?
或者有别的什么办法
  • Beim Anfordern der API (Sie können die Pre-Response- und Post-Response-Verarbeitung in request.js durchführen und dann einen Fehler auslösen, der im globalen onerror verarbeitet wird)

Wie steuert man dann den Sprung im Code?

discussion

Hilfreichster Kommentar

In meinem Projekt habe ich zwei Möglichkeiten ausprobiert, um eingeloggt zu bleiben:
https://github.com/HeskeyBaozi/dva-blog-crud-demo

Alle 25 Kommentare

Ich schlage vor, die zweite zu verwenden (mit der Anforderungssteuerung), es ist sehr einfach, kapseln Sie Ihre Anforderungsfunktion und behandeln Sie sie dann je nach Situation (Sprungseite, Popup-Eingabeaufforderung usw.)

Verarbeitung im Abonnement:

  1. Beurteilen Sie, ob Sie die Zielseite über history.listen aufrufen
  2. Auslösen des Effekts, Beurteilen des Login-Status und Seitensprung im Effekt

Weitere Informationen zum Springen finden Sie unter Seitensprung basierend auf Aktion @dva-knowledge

Ich möchte das Login-Token in jedem Request-Service mitbringen, wie kann ich es in diesem Fall besser schreiben?

@rrandom Ich habe ein $http außerhalb von fetch gekapselt und diesem ein Token hinzugefügt

@hbrls Existiert Ihr Token im Store?Wenn ja, wie schreiben Sie Ihr $http

Speichern Sie das Token im Cookie.Ich denke, die Implementierung von $http sollte ähnlich sein wie https://github.com/dvajs/dva-cli/blob/master/boilerplates/app/src/utils/request.js

@sorrycc Wie dva ?

Das Setzen des Tokens im Cookie ist nicht das, was dva tut, aber der serverseitige Antwortheader tut es.

@sorrycc Gibt es eine Möglichkeit in Dora? Mein derzeitiger Ansatz besteht darin, dass alle APIs Token auf der Serverseite der Website hinzufügen. Ich habe dva und dora erst gestern entdeckt, die ziemlich gut sind.

Ich habe beides gemacht.
Die erste besteht darin, zu der Seite zu springen, um festzustellen, ob das Token gültig ist. Dies geschieht hauptsächlich, um die Seitenberechtigungen des Webs zu kontrollieren.
Die zweite Art von API-Anfrage für jede Seite bringt das Token. Der Server bestimmt, ob er die Berechtigung zum Zugriff auf die API hat. Da auf den Server über eine mobile APP zugegriffen werden kann

Sie können es in localstorage ablegen und jsonwebtoken verwenden

Die Benutzer-Login-Informationen können in login_model gespeichert werden (entspricht dem globalen Modell). Wie erhalte ich dann diese login_model-Informationen in anderen Modellen?

Dazu habe ich die Methode Yield select(global => global) gefunden

history.listen kann erst nach Seitensprüngen verarbeitet werden, oder? Kann keine Verarbeitung durchgeführt werden, bevor Sie wie onEnter springen? Auf diese Weise müssen alle Aktionen zum Laden von Daten im Modell konzentriert werden und können nicht in componentDidMount , da sonst die Anfrage vor der Verarbeitung durch history.listen ausgegeben wird.

@sorrycc Ich

Ist onEnter in router.js? Es kann zuerst von app._store.dispatch verarbeitet werden.

app.router(({ history, app }) => {});

Die App-Instanz kann hier abgerufen werden, https://github.com/dvajs/dva/blob/4cca243/index.d.ts#L70 .

@sorrycc onEnter besagt, dass die obige Methode verwendet wurde, um den Versand in router.js erfolgreich zu erhalten. Danke vielmals.

@sorrycc wie bekomme ich den Versand in request.js

Ich habe eine Ebene von request.js gekapselt. Nachdem sich der Benutzer angemeldet hat, sendet der Server das Token zurück, speichert es in localstorage und legt das Token vor dem Abrufen im Cookie ab. Der Server überprüft das Token. Wenn die Token-Überprüfung fehlschlägt, wird die backend gibt eine 401 in der request.js-Antwort zurück. In der Methode wirft die vereinheitlichte Fehlerbehandlung Error. Fangen Sie den entsprechenden Fehler im Index ab und verwenden Sie dann window.location='/login', um zur Anmeldeseite zu springen

@liSong5713 Bitte

In meinem Projekt habe ich zwei Möglichkeiten ausprobiert, um eingeloggt zu bleiben:
https://github.com/HeskeyBaozi/dva-blog-crud-demo

@zhanbohui ist das gleiche wie Yield select(globalState=>state))

Muss ich dva verwenden?

Die @Vcgoyo- Seite hat keine Anfrage

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

zouyan532 picture zouyan532  ·  3Kommentare

sorrycc picture sorrycc  ·  3Kommentare

huyawei picture huyawei  ·  3Kommentare

ljjsimon picture ljjsimon  ·  3Kommentare

MiaoXingGua picture MiaoXingGua  ·  3Kommentare