前后端分离后用户登录状态的保持和登录状态的安全保障

1.前后端分离后,前端登录状态保持一般采用webstorage或是cookie来保存token或用户信息的方式来维持登录状态。如果webstorage或是cookie中没有token,则前端认为是没有登录,拦截到登录页面。vue中利用路由的beforeEach实现,可在main.js中做如下逻辑:

// 路由判断登录 根据路由配置文件的参数
router.beforeEach((to, from, next) => {
  if (to.matched.some(record => record.meta.requireAuth)){ // 判断该路由是否需要登录权限

    if (localStorage.token) { // 判断当前的token是否存在 ; 登录存入的token
      next();
    }
    else {
      console.log('需要登录');
      next({
        path: '/login',
        query: {redirect: to.fullPath} // 将跳转的路由path作为参数,登录成功后跳转到该路由
      })
    }
  }
  else {
    next();
  }
});

router中配置,通过meta指定路由是否需要登录校验标识

export default new Router({
  routes: [
    {
      path: '/login',
      name: 'login',
      component: Login
    },
    {
      path: '/',
      name: 'App',
      meta:{
        requireAuth: true,
      },
      component:App,
      children:[
        {
          path: 'mycomp/xxx1',
          component: MyComp
        },
        {
          path: 'mycomp/xxx2',
          component: MyComp
        },
        {
          path: 'mycomp/xxx3',
          component: MyComp
        },
        {
          path: 'user/list',
          component: UserlIst
        }
      ]
    }

  ]
})

2.如上虽然利用localstorage实现了登录状态的校验。这里有个问题,如果用户在浏览器控制台手动往localstorage中添加一个token,然后就可以进入系统内的页面了。这是我们不希望的。如果想避免这种情况,必须依靠后端共同配合。即在上面判断localstorage中是否存在token,如果存在则把这个token发送到后台校验这个token是否正确,如果后台校验未通过则跳到登录界面

// 路由判断登录 根据路由配置文件的参数
router.beforeEach((to, from, next) => {
  if (to.matched.some(record => record.meta.requireAuth)){ // 判断该路由是否需要登录权限

    if (localStorage.token) { // 判断当前的token是否存在,存在则向后台发送校验
      let validateToken=调用后端接口校验localStorage.token;

          if(!validateToken){
            next({
            path: '/login',
            query: {redirect: to.fullPath} // 将跳转的路由path作为参数,登录成功后跳转到该路由
            });
          }
      next();
    }
    else {
      console.log('需要登录');
      next({
        path: '/login',
        query: {redirect: to.fullPath} // 将跳转的路由path作为参数,登录成功后跳转到该路由
      })
    }
  }
  else {
    next();
  }
});

3.上面2步控制了未登录时,无法访问系统内的页面。但对于页面上发起的请求并没有控制。比如在页面上有个按钮会像后台请求接口获取数据,这时后台返回token已经过期或是token校验未通过,我们希望用户被打入登录界面,进行登录。这时要用http请求的拦截器。比如vue项目中,请求使用的vue-resource,在main.js加入如下代码:

Vue.http.interceptors.push((request, next) => {
  //为所有请求添加token头
  if(localStorage.token){
    request.headers.set('Authorization', "Bearer "+localStorage.token);
  }

  //后端响应回来,首先进入这个next的回调函数中
  next((response) => {
    //如果后端返回401,则认为是token验证失败,跳转到登录页面
    if(response.status == 401){
      router.push("/login")
    }
    return response
  });
});

注意:vue项目对router、Vue.http等进行配置时,一定要在new Vue实例之前,否则加入的逻辑不生效

一般情况下,加1、3两步进行控制即可

前后端分离 (Frontend-Backend Separation) 对于.NET 开发同样适用,它是一种现代web应用程序架构模式。在这种架构下,前端和后端的功能和服务被明确地分开并各自独立开发: **前端部分(.NET客户端)**: 1. **HTML/CSS/JavaScript +框架(如Angular, React, Vue等)**: .NET开发者通常使用.NET Core或ASP.NET Core创建API,同时前端开发者使用React、Angular或Vue.js等前端框架构建用户界面。这些框架允许分离的组件化开发,提高了开发效率。 2. **AJAX/RESTful API通信**: 前端通过HTTP请求访问.NET Core提供的RESTful API,获取数据或执行操作。 3. **状态管理(Redux, Vuex)**: 应用状态由前端管理,比如使用Redux进行全局状态管理。 **后端部分(.NET服务器端)**: 1. **.NET Core或ASP.NET Core**: 运行于服务器上的.NET框架提供API逻辑,处理HTTP请求,包括身份验证、授权、业务逻辑以及数据库操作。 2. **Web API或Controller**: 创建RESTful服务,返回JSON格式的数据给前端。 3. **安全性**: 可能使用JWT(Json Web Tokens)或其他认证机制对API请求进行身份验证。 **优点**: - 易于维护和扩展:前端和后端独立开发,每个部分都有更清晰的责任边界。 - 具有更好的性能优化潜力:前端可根据需要异步加载资源,后端专注于数据处理。 - 更好的用户体验:前端可以根据不同设备和浏览器调整渲染效果。 **相关问题--:** 1. 在.NET中如何实现前后端分离的最佳实践? 2. 怎么结合.MVC模式和前后端分离在.NET Core中工作? 3. 如何保障在.NET前后端分离架构下的API安全
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值