Periksa apakah Anda masuk:
<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,所有的子路由都生效么?
或者有别的什么办法
Lalu bagaimana cara mengontrol lompatan dalam kode?
Saya menyarankan untuk menggunakan yang kedua (menggunakan kontrol permintaan), ini sangat sederhana, merangkum fungsi permintaan Anda, dan kemudian menanganinya sesuai dengan situasi (lompat halaman, prompt pop-up, dll.)
Pemrosesan dalam langganan:
history.listen
Untuk detail tentang cara melompat, silakan lihat lompatan halaman berdasarkan tindakan @dva-knowledge
Saya ingin membawa token login di setiap layanan permintaan. Bagaimana saya bisa menulisnya dengan lebih baik dalam kasus ini?
@rrandom Saya merangkum $http di luar pengambilan, dan menambahkan token ke ini
@hbrls Apakah token Anda ada di toko?Jika demikian, bagaimana Anda menulis $http
Simpan token di cookie. Saya pikir implementasi $http harus mirip dengan https://github.com/dvajs/dva-cli/blob/master/boilerplates/app/src/utils/request.js
@sorrycc Bagaimana cara mengatur token ke cookie di
Menyetel token dalam cookie bukanlah yang dilakukan dva, tetapi header respons sisi server melakukannya.
@sorrycc Apakah ada cara di dora? Pendekatan saya saat ini adalah bahwa semua API akan menambahkan token di sisi server situs web. Saya baru menemukan dva dan dora kemarin, yang cukup bagus.
Saya melakukan keduanya.
Yang pertama adalah melompat ke halaman untuk menentukan apakah token tersebut valid. Hal ini terutama dilakukan untuk mengontrol izin halaman web.
Jenis permintaan API kedua untuk setiap halaman membawa token. Server menentukan apakah ia memiliki izin untuk mengakses API. Karena server dapat diakses oleh APP seluler
Anda dapat meletakkannya di penyimpanan lokal dan menggunakan jsonwebtoken
Informasi login pengguna dapat disimpan di login_model (setara dengan model global), lalu bagaimana cara mendapatkan informasi login_model ini di model lain?
Ini saya menemukan metode hasil pilih (global => global)
history.listen
hanya dapat diproses setelah halaman melompat, bukan? Tidak dapat melakukan pemrosesan sebelum melompat seperti onEnter
? Dengan cara ini, semua tindakan untuk memuat data perlu dikonsentrasikan dalam model, dan tidak dapat ditempatkan di componentDidMount
, jika tidak, permintaan akan dikeluarkan sebelum pemrosesan dilakukan oleh history.listen
.
@sorrycc Saya menangani masalah login di onEnter. Bagaimana cara mendapatkan penyimpanan atau pengiriman di onEnter (atau router)?
Apakah onEnter di router.js? Dapat diproses oleh app._store.dispatch terlebih dahulu.
app.router(({ history, app }) => {});
Contoh aplikasi dapat diperoleh di sini, https://github.com/dvajs/dva/blob/4cca243/index.d.ts#L70 .
@sorrycc onEnter adalah bahwa metode di atas telah digunakan untuk berhasil mendapatkan pengiriman di router.js. Terima kasih banyak.
@sorrycc cara mendapatkan pengiriman di request.js
Saya merangkum lapisan request.js. Setelah pengguna masuk, server mengirim token kembali dan menyimpannya di penyimpanan lokal, dan menempatkan token di cookie sebelum mengambil. Server memverifikasi token. Jika verifikasi token gagal, backend mengembalikan 401 dalam respons request.js. Dalam metode ini, penanganan kesalahan terpadu melempar Kesalahan. Tangkap kesalahan yang sesuai dalam indeks, lalu gunakan window.location='/login' untuk melompat ke halaman login
@liSong5713 Tolong
Dalam proyek saya, saya mencoba dua cara untuk tetap masuk:
https://github.com/HeskeyBaozi/dva-blog-crud-demo
@zhanbohui sama dengan hasil pilih(globalState=>state)) yang berlaku
Apakah saya harus menggunakan dva?
Halaman @Vcgoyo tidak mengirim permintaan, yaitu 401 masih belum diterima Apa yang menentukan apakah pengguna login saat ini?
Komentar yang paling membantu
Dalam proyek saya, saya mencoba dua cara untuk tetap masuk:
https://github.com/HeskeyBaozi/dva-blog-crud-demo