Chcę być w stanie użyć zmiennej "sektorol" z mojego komponentu logowania w mojej usłudze uwierzytelniania. To jest mój kod login.comPonent.ts:

import { Component, ElementRef, Input, OnInit, ViewChild, NgModule } from '@angular/core';
import {NgForm} from '@angular/forms';
import { FormsModule } from '@angular/forms';
import { Router } from '@angular/router';
import {MatRadioModule} from '@angular/material/radio';
import { stringify } from 'querystring';
import {BrowserModule} from '@angular/platform-browser';
import { AuthenticationService } from "../authentication.service";

@Component({
  selector: 'app-login',
  templateUrl: './login.component.html',
  styleUrls: ['./login.component.css']
})

export class LoginComponent implements OnInit {
  constructor(private router: Router, private authenticationService: AuthenticationService) { }

  ngOnInit(): void {
  }

  selectedRole='User';

  userID = '';
  password = '';
  
  RoleSelection(role){
    this.selectedRole = role;
  }
  Login(){
    
    if(this.selectedRole === 'User'){
      this.router.navigate(['/userpage']);
    }
    else{
      this.router.navigate(['/adminpage'])
    }
    
  }

}

I to jest moja usługa uwierzytelniania:

import { Injectable } from '@angular/core';
import { SignInData } from 'src/SignInData';
@Injectable({
  providedIn: 'root'
})
export class AuthenticationService {

  private readonly mockedUser = new SignInData('user1', '123');
  private readonly mockedAdmin = new SignInData('admin1', '456');
  isAuthenticated = false;

  constructor() { }
  Authenticate(SignInData: SignInData): boolean {
    if(this.CheckLoginDetails(SignInData)){
      this.isAuthenticated = true;
      return true;
    }
    this.isAuthenticated = false;
    return false;
  }

  private CheckLoginDetails(SignInData: SignInData): boolean {
    return this.CheckUserID(SignInData.getUserID()) && this.CheckPassword(SignInData.getPassword());
  }

  private CheckUserID(userID: string): boolean {
      return userID === this.mockedAdmin.getUserID();
  }

  private CheckPassword(password: string): boolean {
    return password === this.mockedAdmin.getUserID();
  }

}

W checkuseRid () i CheckPassword () chcę wdrożyć warstwę, mówiąc: jeśli wybrano sektorol === "Użytkownik" lub jeśli sektorol === "admin", ale wymaga to, aby jakoś mógł zaimportować sektorol z komponentu logowania. Próbowałem z RXJS, ale to nie zadziałało.

-3
Tyednut 22 listopad 2020, 15:51

1 odpowiedź

Najlepsza odpowiedź

Wystarczy dodać właściwość ScedionRole do klasy uwierzytelnianiaService i ustaw go z komponentu.

import { Injectable } from '@angular/core';
import { SignInData } from 'src/SignInData';

@Injectable({
    providedIn: 'root'
})
export class AuthenticationService {

    public selectedRole = 'User';

    private readonly mockedUser = new SignInData('user1', '123');
    private readonly mockedAdmin = new SignInData('admin1', '456');
    isAuthenticated = false;

    constructor() { }
    Authenticate(SignInData: SignInData): boolean {
        if (this.CheckLoginDetails(SignInData)) {
            this.isAuthenticated = true;
            return true;
        }
        this.isAuthenticated = false;
        return false;
    }

    private CheckLoginDetails(SignInData: SignInData): boolean {
        return this.CheckUserID(SignInData.getUserID()) && this.CheckPassword(SignInData.getPassword());
    }

    private CheckUserID(userID: string): boolean {
        if (this.selectedRole === 'User') {

        }
        else if (this.selectedRole === 'Admin') {

        }
        return userID === this.mockedAdmin.getUserID();
    }

    private CheckPassword(password: string): boolean {
        if (this.selectedRole === 'User') {

        }
        else if (this.selectedRole === 'Admin') {

        }
        return password === this.mockedAdmin.getUserID();
    }
}

I ustaw go z komponentu

RoleSelection(role){
    this.authenticationService.selectedRole = role;
    this.selectedRole = role;
}
1
Arash Hatami 22 listopad 2020, 13:07