Tôi đang gặp một số sự cố với xác thực với redux và phản ứng bộ định tuyến và tôi hy vọng một số làm rõ về cách giải quyết tốt nhất vấn đề của tôi.Universal Auth Redux & React Router
Tôi có một thành phần đăng nhập mà khi gửi công văn hành động sau đây:
export const loginUser = (creds) => {
return dispatch => {
dispatch(requestLogin(creds))
return fetch('http://127.0.0.1:4000/api/login', {
...
})
.then(res => {
dispatch(receiveLogin())
browserHistory.push('/admin')
...
})
...
}
}
Hành động receiveLogin cập nhật cờ isAuthenticated trong tiểu bang là true. Tuyến đường được bảo vệ của tôi có các móc sau vào nút Nhập:
export default (state) => {
return {
path: '/',
component: App,
childRoutes: [
{
path: 'protected',
component: Protected,
...
onEnter(nextState, replaceState) {
const loggedIn = //check state.isAuthenticated
if (!loggedIn) {
replaceState(null, 'login')
}
}
}
]
}
}
Như bạn thấy, tôi chuyển trạng thái này làm đối số. Điều này cho phép tôi truy cập trạng thái ban đầu từ máy chủ cũng như trên máy khách. Tuy nhiên, sau khi hành động đăng nhập của tôi xảy ra, rõ ràng móc onEnter vẫn sẽ sử dụng trạng thái ban đầu.
Điều tôi muốn biết là cách tốt nhất để có được trạng thái hiện tại sau khi cờ isAuthenticated được cập nhật và sử dụng nó trong móc onEnter của tôi thay thế. Hoặc, là cách tiếp cận của tôi hoàn toàn sai lầm và tôi nên làm điều này một cách hoàn toàn khác nhau?
Tôi có vấn đề tương tự như Andrew, nhưng tôi đang sử dụng HOC. Vấn đề của tôi là người dùng không thể đăng nhập, bởi vì nó luôn luôn kiểm tra trạng thái hiện tại trước khi phản hồi quay trở lại từ máy chủ - và điều này có nghĩa là người dùng không thể đăng nhập. Có cách nào để điều tiết kiểm tra trong kho lưu trữ redux không? – Abdi
@Abdi yeah Tôi đã gặp một vấn đề tương tự ở đây: https://github.com/mjrussell/redux-auth-wrapper/issues/30. Tôi nghĩ rằng giải pháp là chỉ cần thêm một lá cờ vào kho lưu trữ redux của bạn (isUserFetched) hoặc một cái gì đó giống như nó và nếu đúng - thay vì thực hiện chuyển hướng, hãy hiển thị một trang thay thế trong HOC thay vì thành phần được bao bọc. (như trang tải). Tôi muốn thêm thư này vào thư viện của tôi sớm, chỉ chưa có thời gian – mjrussell
Tôi đã thực sự quản lý để khắc phục sự cố mà không cần đến trang ở giữa. Tôi sử dụng redux- thunk - mà làm cho hành động chờ đợi để giải quyết và sau đó tôi cập nhật trạng thái và sau đó chuyển hướng. Hy vọng điều này có ý nghĩa, nhưng nếu bạn có một vấn đề tương tự chắc chắn nhìn vào [redux-thunk] (https://github.com/gaearon/redux-thunk). Tôi cũng tìm thấy repo này rất hữu ích vì nó đã làm những gì tôi muốn thực hiện [HOC với xác thực] (https://github.com/joshgeller/react-redux-jwt-auth-example) – Abdi