javascript - 如何在 React js 中实现简单的身份验证中间件
问题描述
我是一个刚开始学习 reactjs 的新手,对我来说有些东西在这里和那里。我想实现一个基本的中间件,在呈现应用程序之前检查用户的令牌是否正确。我目前陷入困境:(任何帮助将不胜感激
这是我的 index.js
import React from 'react';
import ReactDOM from 'react-dom';
import './res/scss/app.scss';
import './res/css/theme.css';
import store from './Store';
// eslint-disable-next-line
import VerifyAuth from './components/VerifyAuth';
import Login from './views/auth/Login';
import {Provider} from 'react-redux';
import * as serviceWorker from './serviceWorker';
import { createBrowserHistory } from 'history';
// eslint-disable-next-line
import {Router, Route} from 'react-router';
// Import views
import Home from './views/Home';
const history = createBrowserHistory();
ReactDOM.render((
<Provider store = {store}>
<Router history = {history}>
<Route component = {VerifyAuth}>
<Route exact path = '/' component = {Home}></Route>
<Route path = '/login' component = {Login}></Route>
</Route>
</Router>
</Provider>
), document.getElementById('root'));
serviceWorker.unregister();
这是我的 Store.js
import UserReducer from './reducers/UserReducer';
import AuthReducer from './reducers/AuthReducer';
import {combineReducers, createStore, applyMiddleware} from 'redux';
const fetch = (url, params) => ({
type: 'AUTH.CHECK'
});
const defaultProps = {
authenticated: false,
inc: 0
};
const reducers = combineReducers({
user: UserReducer,
auth: AuthReducer
});
const authCheck = fetchImplementation => (store) => (next) => (action) => {
if (action.type === 'AUTH.CHECK') {
console.log(fetch);
return fetchImplementation(window.fetch);
}else{
console.log('middleware dispatched....', action);
next(action);
}
};
const middleware = applyMiddleware(authCheck);
const store = createStore(reducers, defaultProps, middleware);
store.subscribe(() => {
console.log('update', store.getState());
});
export default store;
这是我的 AuthReducer。
export default function(state = {}, action) {
switch(action.type) {
case 'AUTH.CHECK':
// what do i do now
return true;
default:
return state
}
};
感谢美丽的人们......
解决方案
推荐阅读
- webview - 比较 Xamarin.Android 中相机和麦克风的 PermissionRequest 对象
- python - 无休止地重新提示用户,直到响应正确
- python-3.x - 如何在包含 numpy.ndarrays 的列/列的 pandas 数据帧上执行 StandardScaler?
- typescript - 找出类型的完全限定名
- r - 沿样带提取光栅像素的位置
- javascript - 使用对象选择选项通过 Ajax 请求加载数据时选择选项的问题
- python - 给定特定值,如何返回字典中的先前值?
- android - Kotlin:如何为登录身份验证执行 HTTP 发布请求
- php - 如何在 Laravel 中模拟验证规则
- hash - 如何将 20 字节的以太坊钱包地址转换为 Metamask 中的十六进制格式?