Ошибка: не удается сопоставить ни один маршрут. Сегмент URL: «профиль» или не удалось загрузить ресурс: сервер ответил со статусом 401 (не авторизован) - PullRequest
0 голосов
/ 01 октября 2019

Я работаю в приложении MEANAUTH и хочу получить доступ к профилю пользователя, используя angular jwt, когда я пытаюсь войти в систему и получить доступ к профилю пользователя https://localhost:3000/prifile Я получаю Failed to load resource: the server responded with a status of 401 (Unauthorized) или когда я пытаюсь использовать эти URL `http://localhost://localhost:3000/users/profile``, Я получаю эту ошибку Uncaught (в обещании): Ошибка: Невозможно сопоставить ни один маршрут. Сегмент URL: «пользователи / профиль» Ошибка: невозможно сопоставить ни один маршрут. Сегмент URL: 'users / profile'

вот мой код

auth.service.ts

import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import 'rxjs/add/operator/map';
import { Observable } from 'rxjs';


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

   authToken: any;
   user: any;

  constructor(private http: HttpClient) { }

    registerUser(user){
     let headers = new HttpHeaders();
      headers.append('Content-Type','application/json');
      return this.http.post('http://localhost:3000/users/register', user , {headers: headers})
      .map(res => res);
    }

    authenticateUser(user):Observable<any>{
      let headers = new HttpHeaders();
      headers.append('Content-Type','application/json');
      return this.http.post('http://localhost:3000/users/authenticate', user , {headers: headers})
      .map(res => res);

    }

    getProfile():Observable<any>{
      let headers = new HttpHeaders();
      this.loadToken();
      headers.append('Authorization', this.authToken);
      headers.append('Content-Type','application/json');
      return this.http.get('http://localhost:3000/users/profile', {headers: headers})
      .map(res => res);

    }

    storeUserDate(token, user){
      localStorage.setItem('id_token', token);
      localStorage.setItem('user', JSON.stringify(user));
      this.authToken = token;
      this.user = user;
    }

    loadToken(){
      const token = localStorage.getItem('id_token');
      this.authToken = token;
    }

    logout(){
      this.authToken = null;
      this.user = null;
      localStorage.clear();
    }

  }

profile.component.ts

import { Component, OnInit } from '@angular/core';
import { AuthService } from '../../services/auth.service';
import { Router } from '@angular/router';


@Component({
  selector: 'app-profile',
  templateUrl: './profile.component.html',
  styleUrls: ['./profile.component.css']
})
export class ProfileComponent implements OnInit {

  user: Object;

  constructor(private authService: AuthService, private router: Router) { }

  ngOnInit() {
    this.authService.getProfile().subscribe(profile => {
      this.user = profile.user;
    },
     err => {
       console.log(err);
       return false;
     });

  }

}

profile.html

<div *ngIf="user">
  <h2 class="page-header">{{user.name}}</h2>
  <ul class="list-group">
    <li class="list-group-item">Username : {{user.username}}</li>
    <li class="list-group-item">Email : {{user.email}}</li>
  </ul> 
</div>

и вот мой код restApi моего паспорта, мое приложение отдыха работает нормально, но когда я пытаюсь интегрироваться с угловым клиентом, оно покажет ошибку.

пользователей. js

const express = require("express");
const router = express.Router();
const passport = require("passport");
const jwt = require("jsonwebtoken");
const config = require("../config/database");
const User = require("../models/user");

//Register
 router.post("/register", (req, res, next) => {
  //res.send('REGISTER');
  let newUser = new User({
    name: req.body.name,
    email: req.body.email,
    username: req.body.username,
    password: req.body.password
  });
  User.addUser(newUser, (err, user) => {
    if (err) {
      res.json({ success: false, msg: "Failed to register user" });
    } else {
      res.json({ success: true, msg: "User registered" });
    }
  });
});


//Authenticate
 router.post("/authenticate", (req, res, next) => {
  //res.send('AUTHENTICATE');
  const username = req.body.username;
  const password = req.body.password;
  User.getUserByUsername(username, (err, user) => {
    if (err) throw err;
    if (!user) {
      return res.json({ success: false, msg: "User not found!" });
    }
    User.comparePassword(password, user.password, (err, isMatch) => {
      if(err) throw err;
      if(isMatch){
        const token = jwt.sign({
          type: "user",
          data:{
            _id: user._id,
            name: user.name,
            username: user.username,
            email: user.email
          }
         },config.secret,{
           expiresIn: 604800
         }
        );
        return res.json({
           success: true,
           token: "JWT "+ token,
            user:{
            id: user._id,
            name: user.name,
            username: user.username,
            email: user.email
          }
        });
        }else{
          return res.json({
             success: true,
             msg: "Worng Password."
          });
        }
    });
  });
});



//Profile
router.get("/profile", passport.authenticate('jwt', {session: false}), (req, res, next) => {
 // res.send("PROFILE");
 res.json({user: req.user});
}); 

/* router.get("/profile", passport.authenticate('jwt', {session: false}), (req,res) =>{
  console.log(req.user);
 return res.json(
   req.user
 );
})
  */

module.exports = router;

passport.js

const JwtStrategy = require('passport-jwt').Strategy;
const ExtractJwt = require('passport-jwt').ExtractJwt;
const User = require('../models/user');
const config = require('../config/database');

module.exports = function(passport){
    let opts = {};
    opts.jwtFromRequest = ExtractJwt.fromAuthHeaderWithScheme('jwt');
    opts.secretOrKey = config.secret;
    passport.use(new JwtStrategy(opts, (jwt_payload, done) => {
        User.getUserById(jwt_payload.data._id, (err, user) => {
            if(err){
                return done(err, false);
            }
            if(user){
                return done(null, user);
            }else{
                return done(null, false);
            }
        });
    })
     );
  }

любая помощь высоко ценится ..

1 Ответ

0 голосов
/ 01 октября 2019

Поскольку при входе в систему или регистрации вы получаете токен jwt в ответ, сохраняйте этот токен jwt в localstorage, а когда вы делаете api-вызов профиля пользователя, получите этот токен jwt из localstorage и добавьте его с вашими заголовками. Я надеюсь, что он будетработа для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...