2017-12-13 10 views
-1

私は私のREST APIサーバにHTTPリクエストを使用してユーザー情報を取得する際に問題があったを持っている、私が間違っているかわからない....角度HTTPリクエストの問題

ログインボタンの場合はユーザーのクリック、角度の送信要求ユーザー名とパスワードでサーバーに送信し、正しい場合はユーザー情報を返します。それ以外の場合はnullを返します。問題は、ユーザー名とパスワードは正しいが、ユーザーサービスの可変ユーザーがまだnullであることです。

私はこの問題を解決する方法を知らないので、あなたが私を助けるなら、私は幸せになります!助けていただきありがとうございます。

のREST API:

package cz.flay.fellcms.http; 

import cz.flay.fellcms.dao.UsersRepository; 
import cz.flay.fellcms.entities.User; 
import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.web.bind.annotation.*; 

@CrossOrigin 
@RestController 
@RequestMapping(path = "/api/users") 
public class UsersRestController { 

    @Autowired 
    private UsersRepository usersRepository; 
    Logger logger = LoggerFactory.getLogger(UsersRestController.class); 

    @CrossOrigin 
    @GetMapping(path = "/all") 
    public @ResponseBody Iterable<User> getAll(){ 
     return usersRepository.findAll(); 
    } 

    @CrossOrigin 
    @GetMapping(path = "/verify", params = {"username", "password"}) 
    public @ResponseBody User verify(@RequestParam(value = "username") String username, @RequestParam(value = "password") String password){ 
     logger.info("t"); 
     return usersRepository.verify(username, password); 
    } 
} 

ユーザーサービス

import { Injectable } from '@angular/core'; 
import { HttpClient } from '@angular/common/http'; 
import { User } from '../entities/User'; 

@Injectable() 
export class UserService { 

    private usersUrl: 'http://localhost:8080/api/users'; 

    user: User; 
    verifyUrl: string; 

    constructor(private http: HttpClient) {} 

    isLoggedIn() { 
    return this.user != null; 
    } 

    isAdmin() { 
    return this.user.isAdmin; 
    } 

    unLoggin() { 
    this.user = null; 
    } 

    login(username: string, password: string) { 
    this.verifyUrl = 'http://localhost:8080/api/users/verify?username=' + username + '&password=' + password; 
    this.http.get<User>(this.verifyUrl).subscribe(data => this.user = data); 
    if (this.user != null) { 
     return true; 
    } else { 
     return false; 
    } 
    } 

} 
+1

[角度2のサブスクリプションからデータを返す方法](https://stackoverflow.com/questions/39295854/angular-2-how-to-return-data-from-subscribe) – jonrsharpe

+1

または異なる角度。 ** HTTPメソッドは非同期**なので、observablesの使用と '.subscribe'の必要性。 https://angular.io/guide/http – jonrsharpe

+1

も読んでくださいまた、これは間違っています。 httpのものをサービスに移動します。ユーザ名とパスワードは本文ではなくURLに移動します。その 'verifyUrl'にローカルに保存しないでください。そのRESTサービスRESTfullを取得します。その他 – Zlatko

答えて

0

あなたもすぐにif (this.user !== null)を呼んでいます。その評価は、リクエストが離れて戻ってくる前に呼び出されます。これを試してみてください:

login(username: string, password: string) { 
    this.verifyUrl = `http://localhost:8080/api/users/verify?username=${username}&password=${password}`; 
    return this.http.get<User>(this.verifyUrl) 
     .map(data => { 
      this.user = data 
      if (this.user != null) { 
       return true; 
      } else { 
       return false; 
      } 
     }); 
} 

事は、しかしであるあなたは、このloginメソッドを呼び出すどこ、それは今あなたが、ない同期方法に加入する必要が観測可能です。