Prüfen Sie, ob Sie eingeloggt sind:
<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,所有的子路由都生效么?
或者有别的什么办法
Wie steuert man dann den Sprung im Code?
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:
history.listen
aufrufen 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
Hilfreichster Kommentar
In meinem Projekt habe ich zwei Möglichkeiten ausprobiert, um eingeloggt zu bleiben:
https://github.com/HeskeyBaozi/dva-blog-crud-demo