首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Ionic 4/ Angular 6-使用拦截器重定向401/403上的登录页

Ionic 4是一个基于Angular 6的移动应用开发框架,它允许开发者使用Web技术(HTML、CSS、JavaScript)构建跨平台的移动应用程序。拦截器是Angular中的一个重要概念,它允许我们在HTTP请求和响应之间进行干预和处理。在拦截器中,我们可以实现对请求的修改、添加认证信息、处理错误等操作。

重定向401/403错误状态码到登录页是一种常见的安全机制,用于保护应用程序的敏感数据和功能。当用户未经授权或会话过期时,服务器会返回401(未授权)或403(禁止访问)错误码。为了提供更好的用户体验,我们可以使用拦截器来捕获这些错误,并将用户重定向到登录页。

以下是一个示例拦截器的代码:

代码语言:txt
复制
import { Injectable } from '@angular/core';
import { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent } from '@angular/common/http';
import { Observable } from 'rxjs';
import { tap } from 'rxjs/operators';
import { Router } from '@angular/router';

@Injectable()
export class AuthInterceptor implements HttpInterceptor {

  constructor(private router: Router) { }

  intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    return next.handle(request).pipe(
      tap(
        event => {},
        error => {
          if (error.status === 401 || error.status === 403) {
            // 重定向到登录页
            this.router.navigate(['/login']);
          }
        }
      )
    );
  }
}

在上述代码中,我们创建了一个名为AuthInterceptor的拦截器。在intercept方法中,我们通过next.handle(request)将请求传递给下一个拦截器或最终的HTTP处理程序。使用tap操作符来处理请求的响应,如果出现401或403错误,我们使用Router导航到登录页。

要在Ionic 4应用中使用拦截器,需要将其提供给Angular的HTTP拦截器链。可以在app.module.ts文件中进行配置,示例如下:

代码语言:txt
复制
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';
import { AuthInterceptor } from './auth.interceptor';

import { AppComponent } from './app.component';

@NgModule({
  declarations: [AppComponent],
  imports: [BrowserModule, HttpClientModule],
  providers: [
    {
      provide: HTTP_INTERCEPTORS,
      useClass: AuthInterceptor,
      multi: true
    }
  ],
  bootstrap: [AppComponent]
})
export class AppModule {}

在上述代码中,我们将AuthInterceptor提供给HTTP_INTERCEPTORS令牌,并设置multi为true,以确保它添加到拦截器链中。

Ionic 4和Angular 6的组合提供了强大的移动应用开发能力,使用拦截器重定向401/403错误状态码到登录页可以增强应用程序的安全性和用户体验。腾讯云提供了一系列与移动应用开发相关的产品和服务,例如腾讯云移动应用开发平台、腾讯云移动推送等,可以帮助开发者构建高质量的移动应用。更多关于腾讯云移动开发产品的信息,请访问腾讯云官方网站:https://cloud.tencent.com/product/mobile

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

构建具有用户身份认证 Ionic 应用

我将演示如何使用 OIDC 重定向、Okta Auth SDK 以及基于 Cordova 内嵌浏览器 OAuth 进行登录; 由于功能还在开发中,所以省略了用户注册。 为什么使用 Ionic?...Ionic 3 在 四月份发布,允许使用 Angular 4 进行开发。 注意: "Angular" 是 Angular 2+ 通用名称。AngularJS 是 1.x 版本名称。...之所以用 Angular 命名是因为在 2017 年三月发布了 Angular 4 。...你可以退出之后看一下带标识登录。 ? 注意: 你可能注意到退出之后标签并没有消失。我正在查找 没有正常工作 原因。 发布到移动设备 使用 Ionic 在浏览器中开发移动应用是非常酷事情。...使用这项技术好处就是 Okta 登录具有“记住我”和“忘记密码”功能,所以不需要自己编写代码。 为了将 app 部署到 iPhone,首先将手机插到电脑

23.8K00

构建具有用户身份认证 Ionic 应用

我将演示如何使用 OIDC 重定向、Okta Auth SDK 以及基于 Cordova 内嵌浏览器 OAuth 进行登录; 由于功能还在开发中,所以省略了用户注册。 为什么使用 Ionic?...Ionic 3 在 四月份发布,允许使用 Angular 4 进行开发。 注意: "Angular" 是 Angular 2+ 通用名称。AngularJS 是 1.x 版本名称。...之所以用 Angular 命名是因为在 2017 年三月发布了 Angular 4 。...你可以退出之后看一下带标识登录。 ? 注意: 你可能注意到退出之后标签并没有消失。我正在查找 没有正常工作 原因。 发布到移动设备 使用 Ionic 在浏览器中开发移动应用是非常酷事情。...image.png 使用这项技术好处就是 Okta 登录具有“记住我”和“忘记密码”功能,所以不需要自己编写代码。 为了将 app 部署到 iPhone,首先将手机插到电脑

23.2K50
  • Angular2 拦截器(页面请求修改Url+headers传值+获取服务器返回错误信息)

    , "status.401": "未经授权。服务器拒绝响应。", "status.403": "已禁止。服务器拒绝响应。"...无法找到请求位置。", "status.405": "方法不被允许。使用该位置不支持请求方法进行了请求。", "status.406": "不可接受。...服务器只生成客户端不接受响应。", "status.407": "需要代理身份验证。客户端必须先使用代理对自身进行身份验证。"...等待请求服务器超时。", "status.409": "冲突。由于请求中冲突,无法完成该请求。", "status.410": "过期。请求不再可用。"...response=>{ return response.json() as any[]; }); } } 我们调用userapiservice里面的apilogin方法时会走我们定义拦截器服务

    2.9K20

    axios详解以及完整封装方法

    : 未登录 // 未登录则跳转登录页面,并携带当前页面的路径 // 在登录成功后返回当前页面,这一步需要在登录操作。...例如上面的思想:如果后台返回状态码是200,则正常返回数据,否则根据错误状态码类型进行一些我们需要错误,其实这里主要就是进行了错误统一处理和没登录登录过期后调整登录一个操作。...: 未登录 // 未登录则跳转登录页面,并携带当前页面的路径 // 在登录成功后返回当前页面,这一步需要在登录操作。...1.优化axios封装,去掉之前get和post 2.断网情况处理 3.更加模块化api管理 4.接口域名有多个情况 5.api挂载到vue.prototype省去引入步骤 http.js中axios...未登录状态,跳转登录 case 401: toLogin(); break; // 403 token过期 // 清除token并跳转登录 case 403: tip

    4.8K11

    Vue中Axios封装和API接口管理

    例如上面的思想:如果后台返回状态码是200,则正常返回数据,否则根据错误状态码类型进行一些我们需要错误,其实这里主要就是进行了错误统一处理和没登录登录过期后调整登录一个操作。...,这一步需要在登录操作。                                 ...主要有以下改变: 1.优化axios封装,去掉之前get和post 2.断网情况处理 3.更加模块化api管理 4.接口域名有多个情况 5.api挂载到vue.prototype省去引入步骤... (status) {         // 401: 未登录状态,跳转登录         case 401:             toLogin();             break;         ...// 403 token过期         // 清除token并跳转登录         case 403:             tip('登录过期,请重新登录');

    3.2K80

    【Appetite】ionic3实录(五)基本服务实现

    ,装了插件后,src目录右键会出现Ionic Generate快捷菜单,点击后弹出选择界面,输入名称即可自动创建。...默认使用application/json请求头,有时我们需要根据后台接口来配置请求头,在这就预先配置几个常用RequestOption,方便按需要随时切换。...; } else { switch (resp.status) { case 401: errMsg = '无权限访问,或许登录信息已过期,请重新登录';...因为目前大多插件异步使用Promise,Observable转Promise比较简单,而Promise转Observable比较麻烦,为了更方便集成,所以把官方推荐Observable方式转成Promise...四、缓存服务 ionic g provider cache import { Injectable } from '@angular/core'; import { Http } from '@angular

    3.1K40

    SpringBoot 过滤器、拦截器、监听器对比及使用场景!

    容器管理,并不 依赖Tomcat等容器,是可以单独使用。...当拦截到登录请求时,即使重定向也无法生效。需采用服务端给地址由前端进行跳转。详细见登录拦截器代码。 // 前端处理 <!...1.1启动项目访问首页 http://localhost:8080/page/index “由于没有登录,直接重定向到了登录 1.2输入用户名密码完成登录,调转到用户 “此时在访问首页 1.2...退出登录 “成功退出后,访问为授权页面也相对会被重定向登录 1.3 ajax未授权访问测试 “点击访问user ,由于未登录,没有全权访问。...在前端进行了页面跳转,转到了登录。 2.过滤器测试 “可以看到过滤器进行了相对应处理,重写getParameterValues()也生效了。

    1.3K20

    Vue + Element UI 实现权限管理系统 前端篇(三):工具模块封装

    封装 axios 模块 封装背景 使用axios发起一个请求是比较简单事情,但是axios没有进行封装复用,项目越来越大,会引起越来越多代码冗余,让代码变得越来越难维护。...封装要点 统一 url 配置 统一 api 请求 request (请求) 拦截器,例如:带上token等,设置请求头 response (响应) 拦截器,例如:统一错误处理,页面重定向等 根据需要,结合...Vuex 做全局 loading 动画,或者错误处理 将 axios 封装成 Vue 插件使用 文件结构 在 src 目录下,新建一个 http 文件夹,用来存放 http 交互 api 代码。...token if (token) { config.headers.accessToken = token } else { // 重定向登录页面...: err.message = '未授权,请登录' break case 403: err.message

    4.9K40

    Vue合理配置axios并在项目中进行实际应用

    送人玫瑰,手有余香,你是什么,你世界就是什么 前言 网络与axios相关教程、以及源码解析有很多,还有健全官方文档,本篇文章面向于初学axios库开发者,目标是快速上手,如果觉得本篇文章帮助到了你...> { // 状态码判断 switch (status) { // 401: 未登录状态,跳转登录 case 401: // 跳转登录 break;...// 403 token过期 case 403: // 如果不需要自动刷新token,可以在这里移除本地存储中token,跳转登录 break; // 404请求不存在...$api = api; 实际应用 例如这样一个场景:后端所有接口都需要登录后,根据成功登录返回token进行访问。...("token"); 判断token是否存在,如果不存在则获取 // if(lodash.isEmpty(token)){ // 跳转登录:此处仅用于演示,用户名和密码为固定数据

    1.9K20

    商城项目-网关登录拦截器

    4.网关登录拦截器 接下来,我们在Zuul编写拦截器,对用户token进行校验,如果发现未登录,则进行拦截。...4.1.引入jwt相关配置 既然是登录拦截,一定是前置拦截器,我们在leyou-gateway中定义。...通过JWT对token进行校验 通过:则放行;不通过:则重定向登录 @Component @EnableConfigurationProperties(JwtProperties.class) public...证明我们拦截器生效了,但是,似乎有什么不对。这个路径似乎不应该被拦截啊!.../code 搜索接口:/search/** 另外,跟后台管理相关接口,因为我们没有做登录和权限,因此暂时都放行,但是生产环境中要做登录校验: 后台商品服务:/item/** 所以,我们需要在拦截时,配置一个白名单

    62710

    HTTP 返回状态值详解

    4、Http/1.1 400 Bad Request 域名绑定错误   一般是服务器域名未绑定成功,未备案等情况。...您可以使用网站管理员工具查看一下 Googlebot 在抓取重定向网页时是否遇到问题。诊断下网络抓取列出了由于重定向错误导致 Googlebot 无法抓取网址。   ...4xx(请求错误)   这些状态码表示请求可能出错,妨碍了服务器处理。   400(错误请求)服务器不理解请求语法。   401(未授权)请求要求身份验证。...对于登录后请求网页,服务器可能返回此响应。   403(禁止)服务器拒绝请求。...如果您网站上没有 robots.txt 文件,而您在 Google 网站管理员工具"诊断"标签 robots.txt 看到此状态码,则这是正确状态码。

    3K30

    JSON Web Token(JWT)教程:一个基于Laravel和AngularJS例子

    基于token认证是无状态,因此不需要在会话中存储用户信息。这使我们能够扩展我们应用程序,而不必担心用户登录位置。我们可以轻松地使用相同token从除了我们登录域之外域中获取安全资源。...我已经使用Bootstrap创建了一个导航栏,它将根据用户登录状态更改相应链接可见性。登录状态由控制器作用域中token变量决定。...在我们例子中,Authorization如果用户被认证,我们要拦截每个HTTP请求并注入一个包含我们JWT 头。我们也可以使用拦截器来创建一个全局HTTP错误处理程序。...这是我们拦截器一个例子,它们在浏览器本地存储中可用时注入一个token。...如果不是这样,服务器将使用401未经授权错误状态代码进行响应。 认证服务 Auth服务负责登录并向后端注册HTTP请求。

    30.5K10

    SpringBoot整合Security

    默认登录用户名是“user”,默认密码在启动时输出在控制台中。...2.1 Security几种登录成功/失败处理程序: 前后端分离项目需要后端返回JSON数据而非页面,因此需要重写Security几个处理程序: (1)处理登录成功 http.formLogin()...(String),设置登录失败后处理 修改配置,实现登录成功(或失败)后使用JSON返回数据 (3)处理匿名(未登录)访问和权限不足请求 用户未登录时访问授权页面,Security会默认重定向登录...                                                  .loginPage("/login")                    //不配置loginPage会生成默认登录...})                 //权限不足访问处理,返回状态码403                 .accessDeniedHandler((req,resp,denyEx)->{

    1K20

    【.NET Core 3.0】 46 ║ 授权认证:自定义返回格式

    状态码来进行拦截器进行封装,而不用看返回结果了,单单从 statuscode ,就直接统一拦截,这样看似特别完美,那为啥还会有第二种解决方案呢,请继续往下看。...2、自定义返回格式内容 上边方法真的就特别完美么,首先,拦截器这个优点,并不是只能用在拦截 http statuscode ,针对具体返回内容也可以拦截。...简单来说,就是获取当前 token 角色信息和访问URL地址,做匹配和判断,判断是否有权限,有,就 succeed,没有就 failed(这里可能是 401 ,也可能是403)。...当没有登录时候,就是 没有登录,或者token过期时候,我们就 failed,会自动返回 401; 当token还有效,但是不匹配Role 和 URL 时候,我们返回 failed,会自动返回 403..., CODE403, CODE404, CODE500 } } 这个实体类,是用来返回响应内容,如何使用,请往下看。

    66420
    领券