axios + router4 + mobx:对于全局登录的思考

前两天在做登录注册的一个思考。无论采取jwt或者cookie验证的方法,前端一旦判断请求的验证无效,那么页面要重定向要登录页面去重新登录。
下面我的解决方法:

生成routerStore

在组件内部可以通过withRouter访问路由history。这里通过将history保存在routerStore,以后后续使用。

import {observable, action} from 'mobx'

class RouterStore {

    @observable history = null

    @action
    setHistory(history) {
        this.history = history
    }
}

export default  new RouterStore();

在之前App.js里面将Store引入。

import countStore from './mobx/CountStore'
import changeNameStore from './mobx/ChangeNameStore'
import routerStore from './mobx/RouterStore'


const stores = {
    countStore,
    changeNameStore,
    routerStore,
}

在axios里面进行全局登录判断

首先在Main组件中将history复制给store的history。

@withRouter
@inject("routerStore")
@observer
class Home extends React.Component {
    constructor(props) {
        super(props)
        // 没有super(props), 后面使用回报错
        // 定义state
        // bind方法
        // 其他初始化工作
        this.props.routerStore.history = this.props.history

    }

在axios的拦截器中做全局判断:

// Add a response interceptor
instance.interceptors.response.use( (response) => {
    // 返回错误判断
    console.log("filter error code")
    // 判断如果需要登录,routerStore.history.replace("/login")
    routerStore.history.replace("/login")
    return response;
},  (error) => {
    // 可以在后面的请求中catch
    console.log("interceptors response error")
    return Promise.reject(error);
});

这里做个测试,每一个请求都重定向到login。
测试成功,完整代码请查看:
github: https://github.com/yunshuipiao/react-mobx-axios

不借助mobx

鉴权,登录重定向的判断都在axios的拦截器中,可以考虑将这部分代码在component中实现,这样可以用history去重定向到登录页面。

@withRouter
@inject("routerStore")
@observer
class Home extends React.Component {

    constructor(props) {
        super(props)
        //init and bind
       // axios  interceptors
    }

    render() {
        return (
            <div>
                <Switch>
                    <Route path="/login" component={Login}/>
                    <Route path="/" component={Main}/>
                </Switch>
            </div>
        );
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • vue-login-intercept 一个 Vue.js 的小demo 介绍 项目地址,有喜欢的欢迎 star ...
    无亦情阅读 12,221评论 4 21
  • afinalAfinal是一个android的ioc,orm框架 https://github.com/yangf...
    passiontim阅读 15,646评论 2 45
  • 因为今天下雨了,所以今天的体育课我们没有出去练跳绳。李老师先让我们写的拼音,抄写语文书第40页的音节,每个写两...
    M张皓轩M阅读 304评论 2 0
  • 很偶尔的,相互一个刻意的转身,一次清浅的回眸,心便再次低到了灰尘里,只怕今后以后“万劫不复”…… 曾经总以为,许多...
    三个孩子的爸阅读 176评论 0 0
  • 1、凭什么用户会产生惊喜感? 靠的是【高性价】使用户收获了实惠,产生了信赖;【人格化】使用户收获了愉悦,产生了舒...
    格勤阅读 236评论 0 0