こんにちは、私はAngular 2をかなり新しくしています。HTTP GET in Angular 2はHTTP POSTでログイン用に受信した応答をトリガーします
バックエンドにhttp投稿を行い、自分のトークンを取得するために使用するログイン方法は次のとおりです。それはうまくいく。
public login(username, password) {
const headers = new Headers({
'Content-Type': 'application/x-www-form-urlencoded',
'Authorization': 'Basic ' + btoa('live-test:')
});
const requestOptions = new RequestOptions({ headers });
const urlSearchParamsLogin = new URLSearchParams();
urlSearchParamsLogin.append('grant_type', 'password');
urlSearchParamsLogin.append('client_id', 'live-test');
urlSearchParamsLogin.append('username', username);
urlSearchParamsLogin.append('password', password);
const paramsLogin = urlSearchParamsLogin.toString();
this.http.post(this.urlAuth, paramsLogin, requestOptions)
.map(response => response.json().access_token)
.subscribe(
response => {
localStorage.setItem('token', response);
alert(localStorage.getItem('token'));
},
error => {
console.log(error.text());
}
);
}
マイcheckToken方法
public checkToken() {
const token = localStorage.getItem('token');
const headers = new Headers();
headers.append('Content-Type', 'application/x-www-form-urlencoded');
headers.append('Accept', 'application/json');
const urlSearchParamsCheckToken = new URLSearchParams();
urlSearchParamsCheckToken.append('token', token);
const paramsCheckToken = urlSearchParamsCheckToken.toString();
const options = new RequestOptions({ headers: headers , params:
paramsCheckToken});
this.http.get('http://localhost:8082/cq-webapp/oauth/check_token', options)
.map(response => response.json().user_name)
.subscribe(
response => {
alert(response);
},
error => {
console.log(error.text());
}
);
}
}
checkToken方法は、それが私のJavaのバックエンドからバックそのHTTPレスポンスを取得した後、それが持っている後に、上記の私のログイン方法は、(トークンで別の応答を取得する以外は正常に動作します最初にトークンを取得するためにすでに行われています)。ログインメソッドが別の応答を得るのはなぜですか?私のAngular 2を別の方法で書くことでこの非同期的な行動を防ぐことができますか?
郵便配達員がcheckToken HTTP GETで追加のhttp応答を受信しないため、これは私のSpringバックエンドでは問題ではないと思います。これがAngular 2 Typescriptの問題であることを確かめてください。
助けが必要ですか?
****アップデート、ここに修正がありました。私はまだ前にhtmlがcheckTokenボタンのクリックでログインを引き起こしていた理由を聞くことに興味があります。ここで
<div>
<h1>Login</h1>
<form role="form" (submit)="login(username.value, password.value)">
<div class="form-group">
<label for="username">Username</label>
<input type="text" #username class="form-control" id="username"
placeholder="Username">
</div>
<div class="form-group">
<label for="password">Password</label>
<input type="password" #password class="form-control" id="password"
placeholder="Password">
</div>
<button type="submit" class="btn btn-default">Submit</button>
<button (click)="checkToken()" >Check Token</button>
</form>
</div>
が
<div>
<h1>Login</h1>
<form role="form">
<div class="form-group">
<label for="username">Username</label>
<input type="text" #username class="form-control" id="username"
placeholder="Username">
</div>
<div class="form-group">
<label for="password">Password</label>
<input type="password" #password class="form-control" id="password"
placeholder="Password">
</div>
<button (click)="login(username.value, password.value)">Submit</button>
<button (click)="checkToken()" >Check Token</button>
</form>
</div>
どのようにこれらのメソッドを呼び出しますか? –
ログインメソッドにブレークポイントを設定し、2番目の呼び出しがどこから来るかを確認します。 –
@ JuliaPassynkovaとMartin、あなたの回答に感謝します。私はちょうど私の問題を認識した。 checkTokenボタンのように、(click)= "checkToken()"が、ログイン送信ボタンに関連付けられたフォームの送信時にトリガーしていたようです。どのように起こっているのかわかりませんが、フォームの上部にある送信ロジックを削除し、ログインボタンを直接サブミットロジックなしで起動させると、うまくいきます。私はなぜ私のcheckTokenボタンが私がそれからtype = submitを削除したときにサブミットボタンとして間違っていたのかわかりません。 –