issue with authentication guard function

Here is my CanActivate guard clause implementation in TypeScript. However, when I try to compile this code, I encounter the following error:

A function that does not return 'void' or 'any' must have a return value

   canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot):boolean {

     this.appService.isValidUser().subscribe({
        next: (data) => data.authenticated, // will return true or false
        error: (err) => false
    });
}

What might be causing this error?

Answer №1

Ensure canActivate returns an Observable, rather than a Subscription. Invoking .subscribe() will result in a Subscription, hence the usage of .map().

To manage errors, implement .catch()

canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> {

  return this.appService.checkUserValidity()
  .map(data => data.authenticated)
  .catch(_ => Observable.of([false]));
}

Remember to import all necessary operators

import 'rxjs/add/observable/of';
import 'rxjs/add/operator/catch';
import 'rxjs/add/operator/map';

Similar questions

If you have not found the answer to your question or you are interested in this topic, then look at other similar questions below or use the search

Verify Angular Reactive Form by clicking the button

Currently, I have a form set up using the FormBuilder to create it. However, my main concern is ensuring that validation only occurs upon clicking the button. Here is an excerpt of the HTML code: <input id="user-name" name="userName" ...

Tips for utilizing <Omit> and generic types effectively in TypeScript?

I'm currently working on refining a service layer in an API with TypeScript by utilizing a base Data Transfer Object. To prevent the need for repetitive typing, I have decided to make use of the <Omit> utility. However, this has led to some per ...

Creating sparse fieldset URL query parameters using JavaScript

Is there a way to send type-related parameters in a sparse fieldset format? I need help constructing the URL below: const page = { limit: 0, offset:10, type: { name: 's', age:'n' } } I attempted to convert the above ...

Encountering an issue in app.module.ts with Angular 6 when trying to pass an array of injectables to providers resulting in the error message: "Property 'length' of undefined cannot be read"

Below is an array containing injectables connected to services: import { YouTubeSearchService, YOUTUBE_API_KEY, YOUTUBE_API_URL } from './you-tube.service'; export const youTubeSearchInjectables: Array<any> = [ { provide: Yo ...

Loading data in an Angular Material data table is proving to be a challenge

Recently, I decided to try using Angular Material Data table in my project. With some tweaks, I was able to successfully load the table header, however, I encountered an issue where the data was not displaying as expected. Upon checking the console log, th ...

Customize back button functionality in Ionic 2

Is it possible to modify the behavior of the back button shown in this image? I would like to specify a custom destination or perform an action before navigating back, instead of simply returning to the previous page. https://i.stack.imgur.com/EI2Xi.png ...

Tips for utilizing the index and style attributes when passing them to the Row function in React-Window

Currently, I am attempting to define the index and style parameters passed to the Row function in TypeScript. //https://github.com/bvaughn/react-window import * as React from "react"; import styled from "styled-components"; import { Fi ...

Issue with TypeScript Decorator Not Properly Overriding Get/Set Functions for Instance Properties

I'm struggling with creating a TypeScript decorator that modifies the get method for a property within a class. The issue I'm facing is getting it to affect instances of the class. Below is an example scenario: function CustomDecorator() { r ...

Export all except those from the module in ESM

Suppose I have two imports containing numerous named exports, too many to list individually, and I need to reexport them while excluding a few due to naming conflicts. For example, consider the following two files: foo.js: export const a = 1; export cons ...

What is the best way to store JSON data as an object in memory?

How do I convert the result of an HTTP request from JSON format to an object in TypeScript? Below is the code snippet: Component: import { Component } from '@angular/core'; import { DateTimeService } from './datetime.service'; import ...

Looking for a way to toggle the visibility of a dropdown list when clicking on an input in Angular7?

My Angular7 application features a dropdown menu that automatically closes when an item is selected. Additionally, I have implemented functionality to toggle the dropdown open and closed by clicking on an input field. You can view a live example of this be ...

What are the reasons behind the inconsistency in matching function signatures by the TypeScript compiler?

Why doesn't the typescript compiler always match function signatures correctly, as shown in the examples below: type Func = (a: string, b: number)=>void //flagged as expected const func1: Func = true //not flagged as expected const func2: Func = ...

Angular 2 .net core project experiencing issues with missing files in the publish folder

Exploring the Angular 2 template within a .NET Core framework, as detailed in this resource . However, upon publishing the solution, I noticed that all the files within the "app" subfolder of ClientApp are missing. This leads to a situation where my esse ...

ng2-idle server side rendering problem - Uncaught ReferenceError: document is undefined

Can ng2-idle be used for idle timeout/keepalive with pre-rendering in Angular 4? I followed this link for implementation: It works fine without server pre-rendering, but when I add rendering back to my index.html, I keep getting the following error: Exce ...

"Encountering a 404 (Not Found) error when attempting to access local backend APIs through Angular

Recently, I integrated Angular Universal into my project to enhance performance and improve SEO. Everything was working smoothly when I ran 'ng serve', with the app able to communicate with the backend. However, when I tried running 'npm run ...

"Encountered an error: 'Unexpected token export' while working on an Angular application using SystemJS and

Inquiry: perplexing "Unexpected token export" Recently encountered this issue in an Angular demo hosted on plunker where SystemJS is used to transpile TypeScript code directly in the browser. The code was flawless and operated smoothly on my local syste ...

How to execute a function in a child component that is declared in the parent component using Angular

Is anyone able to help me with an issue I am facing in my Angular project? I have two components, 'app' and 'child'. Within the child component, I have a button that calls a function defined in the app component. However, this setup is ...

Showing a picture in Angular from a stored image on a node.js server

I'm curious about security measures. Let's say I've uploaded an image of an animal to the server, such as 1545419953137bear.jpg, which is stored in my backend uploads folder along with other images. On the frontend, I use an img element wit ...

Using the className prop in React with TypeScript

How can the className prop be properly typed and utilized in a custom component? In the past, it was possible to do the following: class MyComponent extends React.Component<MyProps, {}> { ... } and then include the component using: <MyCompone ...

Utilizing the adapter design pattern in Angular with TypeScript for enhancing a reactive form implementation

I've been struggling to understand how to implement the adapter pattern in Angular6. Despite reading numerous articles and tutorials, I still can't quite grasp the concept. Could someone provide some insights on this topic? Essentially, I have a ...