HarmonyOS Next如何基于HMRouter实现 应用未登录,点击跳转登录页的校验场景?

阅读 546
avatarAI BotBETA
在HarmonyOS Next中,你可以通过HMRouter实现应用未登录时点击跳转登录页的校验场景。以下是一个基本的实现思路:

1. **定义路由规则**:
   首先,在应用中定义路由规则,包括登录页和目标页的路由。使用HMRouter的注解或者配置文件来定义这些路由。

2. **创建全局拦截器**:
   创建一个全局的路由拦截器,用于检查用户的登录状态。如果用户未登录,并且尝试访问需要登录权限的页面,则拦截器将路由重定向到登录页。

3. **实现拦截逻辑**:
   在拦截器中,可以通过检查用户的登录状态(例如,通过检查是否有有效的会话令牌或用户信息)来决定是否允许访问目标页。如果未登录,则修改路由目标为登录页,并可以附带一些参数(如目标页的URL)以便登录后重定向回原页面。

4. **配置拦截器**:
   将创建的全局拦截器配置到HMRouter的路由管理系统中,确保所有路由请求都会经过这个拦截器进行处理。

5. **处理登录后的重定向**:
   在登录页中,处理用户登录成功后的逻辑,并根据之前传递的参数(如目标页的URL)将用户重定向回原页面。

通过以上步骤,你可以基于HMRouter在HarmonyOS Next中实现应用未登录时点击跳转登录页的校验场景。这有助于提升应用的用户体验和安全性。
1 个回答

应用中经常会有当用户未登录应用时,点击某些应用内容会自动跳转到登录页面的场景,在使用HMRouter对此场景进行实现时,可以采用以下步骤:

  1. 定义拦截器类LoginCheckInterceptor实现IHMInterceptor接口。
  2. 为定义的拦截器类添加@HMInterceptor注解,通过interceptorName配置拦截器名称LoginCheckInterceptor。
  3. 实现IHMInterceptor的handle方法,在该方法中根据当前的登录状态来控制页面跳转的目标。

    1. 当用户已登录,通过返回HMInterceptorAction.DO_NEXT,正常执行后续页面跳转逻辑。
    2. 当用户未登录,通过Toast弹窗向用户提示登录,然后跳转到登录页面,最后通过HMInterceptorAction.DO_REJECT来拦截此次跳转请求。
    @HMInterceptor({ interceptorName: 'LoginCheckInterceptor' })
    export class LoginCheckInterceptor implements IHMInterceptor {
      handle(info: HMInterceptorInfo): HMInterceptorAction {
     // ...
       if (!!AppStorage.get('isLogin')) {
         return HMInterceptorAction.DO_NEXT;
       } else {
         info.context.getPromptAction().showToast({ message: '请先登录' })
         HMRouterMgr.push({
           pageUrl: 'loginPage',
           param: info.targetName,
           skipAllInterceptor: true
         })
         return HMInterceptorAction.DO_REJECT;
       }
       // ...
      }
    }
  4. 在需要进行拦截的页面中配置@HMRouter的interceptors参数即可,由于一个页面可以配置多个拦截器,所以需要将关联的拦截器名称封装为一个数组进行传入。

    @HMRouter({
      pageUrl: 'shoppingBag',
      singleton: true,
      interceptors: ['LoginCheckInterceptor'],
      lifecycle: 'requestLifecycle'
    })
    @Component
    export struct ShoppingBagContent {
      // ...
    }

    本文参与了 【 HarmonyOS NEXT 技术问答冲榜,等你来战!】欢迎正在阅读的你也加入。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进