Dva: Bagaimana melakukan manajemen status login global

Dibuat pada 19 Sep 2016  ·  25Komentar  ·  Sumber: dvajs/dva

Periksa apakah Anda masuk:

  • Saat berpindah halaman (dapatkah Anda hanya melakukan onEnter={isLogin} di setiap sub-router?), sebagai berikut:
<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,所有的子路由都生效么?
或者有别的什么办法
  • Saat meminta api (Anda dapat melakukan pemrosesan pra-respons dan pasca-respons di request.js, lalu melempar kesalahan, yang diproses di onerror global)

Lalu bagaimana cara mengontrol lompatan dalam kode?

discussion

Komentar yang paling membantu

Dalam proyek saya, saya mencoba dua cara untuk tetap masuk:
https://github.com/HeskeyBaozi/dva-blog-crud-demo

Semua 25 komentar

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:

  1. Nilai apakah akan memasuki halaman target melalui history.listen
  2. Memicu efeknya, menilai status login dan lompatan halaman dalam efeknya

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?

Apakah halaman ini membantu?
0 / 5 - 0 peringkat