Bagaimana menerapkan dikonfirmasi rute dalam Bereaksi Router 4?
Saya mencoba untuk menerapkan dikonfirmasi rute yang Bereaksi Router 4 sekarang mencegah hal ini bekerja:
<Route exact path="/" component={Index} />
<Route path="/auth" component={UnauthenticatedWrapper}>
<Route path="/auth/login" component={LoginBotBot} />
</Route>
<Route path="/domains" component={AuthenticatedWrapper}>
<Route exact path="/domains" component={DomainsIndex} />
</Route>
Kesalahan adalah:
Peringatan: Anda tidak harus menggunakan
<Rute komponen>
dan<Route anak-anak>
di rute yang sama;<Route anak-anak>
akan diabaikan
Dalam hal ini, apa cara yang benar untuk menerapkan ini?
Muncul di bereaksi-router
(v4) dokumen, itu menunjukkan sesuatu seperti
<Router>
<div>
<AuthButton/>
<ul>
<li><Link to="/public">Public Page</Link></li>
<li><Link to="/protected">Protected Page</Link></li>
</ul>
<Route path="/public" component={Public}/>
<Route path="/login" component={Login}/>
<PrivateRoute path="/protected" component={Protected}/>
</div>
</Router>
Tapi isit mungkin untuk mencapai ini sementara pengelompokan sekumpulan rute yang sama?
UPDATE
Ok, setelah beberapa penelitian, saya datang dengan ini:
import React, {PropTypes} from "react"
import {Route} from "react-router-dom"
export default class AuthenticatedRoute extends React.Component {
render() {
if (!this.props.isLoggedIn) {
this.props.redirectToLogin()
return null
}
return <Route {...this.props} />
}
}
AuthenticatedRoute.propTypes = {
isLoggedIn: PropTypes.bool.isRequired,
component: PropTypes.element,
redirectToLogin: PropTypes.func.isRequired
}
Isit yang benar untuk mengirimkan sebuah aksi di render()
ini terasa salah. Itu tidak benar-benar tampak benar dengan componentDidMount
atau beberapa lainnya hook baik?
100
13
Anda're akan ingin menggunakan
Mengarahkan
komponen. Ada's beberapa pendekatan yang berbeda untuk masalah ini. Berikut ini's salah satu yang saya suka, memiliki PrivateRoute komponen yang diperlukan dalam sebuahauthed
prop dan kemudian membuat didasarkan pada alat peraga.Sekarang anda `Rute ini dapat terlihat seperti ini
Jika anda're masih bingung, saya menulis posting ini yang dapat membantu - Dilindungi rute dan otentikasi dengan Bereaksi Router v4
Tnx Tyler McGinnis untuk solusi. Saya membuat ide dari Tyler McGinnis ide.
Anda dapat menerapkan yang seperti ini
decisionFunc hanya sebuah fungsi yang mengembalikan nilai true atau false
Hanya menambahkan solusi saya untuk masalah ini.
Saya menggunakan jwt token untuk otentikasi, Sehingga jika pengguna memiliki tanda itu maka saya akan mengarahkan mereka ke halaman rumah atau lain aku akan mengarahkan mereka untuk masuk pada halaman default (yang merupakan rute ini '/'). Jadi setelah user login dan mencoba untuk akses masuk halaman url (dalam kasus saya '/') . Saya akan mengarahkan mereka ke rumah secara default('/rumah').
Dan komponen yang memiliki HOC bernama requireAuth untuk memeriksa apakah user token yang valid.jika tidak maka panggilan signout tindakan yang menghilangkan localhistory token.
menginstal bereaksi-router-dom
kemudian buat dua komponen satu untuk pengguna yang valid dan tidak valid untuk pengguna.
coba ini app.js
Berdasarkan jawaban dari @Tyler McGinnis. Saya membuat pendekatan yang berbeda dengan menggunakan ES6 sintaks dan bersarang rute dengan dibungkus komponen:
Dan menggunakannya:
Aku tahu itu's sudah lama tapi aku've telah bekerja pada npm paket untuk pribadi dan umum rute.
Berikut ini's bagaimana untuk membuat pribadi rute:
Dan anda juga dapat membuat Semua rute yang hanya unauthed pengguna dapat mengakses
Saya harap ini membantu!
Jawaban saya Sebelumnya tidak terukur. Berikut adalah apa yang saya pikir adalah pendekatan yang baik-
Rute Anda-
Idenya adalah untuk menggunakan pembungkus di
komponen
alat peraga yang akan kembali komponen asli jika tidak ada auth diperlukan atau sudah dikonfirmasi jika tidak akan kembali default komponen misalnya Login.Aku diimplementasikan menggunakan-
mengotentikasi alat peraga akan diteruskan ke komponen misalnya pendaftaran menggunakan pengguna yang keadaan dapat berubah. Lengkapi AppRoutes-
Memeriksa proyek yang lengkap di sini: https://github.com/varunon9/hello-react
Tampaknya anda ragu-ragu dalam membuat sendiri komponen dan kemudian pengiriman di render metode? Nah anda bisa menghindari kedua dengan hanya menggunakan
render
metode<Rute>
komponen. Tidak perlu untuk membuat<AuthenticatedRoute>
komponen kecuali jika anda benar-benar ingin. Hal ini dapat sebagai sederhana sebagai berikut. Catatan{...routeProps}
menyebar memastikan anda terus mengirim sifat-sifat<Rute>
komponen ke komponen anak (<MyComponent>
dalam kasus ini).Lihat Bereaksi Router V4 membuat dokumentasi
Jika anda tidak ingin membuat didedikasikan komponen, maka sepertinya anda berada di jalur yang benar. Sejak Bereaksi Router V4 adalah murni deklaratif routing (ia mengatakan hal itu tepat di keterangan) saya tidak berpikir anda akan lolos dengan menempatkan kode redirect luar normal komponen siklus hidup. Melihat kode untuk Bereaksi Router itu sendiri, mereka melakukan redirect baik
componentWillMount
ataucomponentDidMount
tergantung pada apakah atau tidak itu adalah sisi server rendering. Berikut ini adalah kode di bawah ini, yang cukup sederhana dan bisa membantu anda merasa lebih nyaman dengan yang mana untuk menempatkan anda mengarahkan logika.Heres bagaimana saya soal dengan Bereaksi dan Ketangkasan. Semoga membantu !
Berikut ini adalah bersih sederhana dilindungi rute
isTokenVerified
adalah metode panggilan untuk memeriksa otorisasi token pada dasarnya ia mengembalikan boolean.Saya juga mencari beberapa jawaban. Di sini semua jawaban yang cukup baik, namun tidak satupun dari mereka memberikan jawaban bagaimana kita dapat menggunakannya jika pengguna mulai aplikasi setelah membukanya kembali. (Aku bermaksud untuk mengatakan menggunakan cookie bersama-sama).
Tidak perlu untuk membuat bahkan berbeda privateRoute Komponen. Di bawah ini adalah kode saya
Dan di sini adalah authComponent
Di bawah ini saya telah menulis blog, anda bisa mendapatkan penjelasan lebih mendalam di sana juga.
Buat yang Dilindungi rute di ReactJS