私はDrupal 7サービスAPI(v7.x-3.17)を使用してAngular2フロントエンドと接続しています。Angular2とDrupal 7サービスAPI認証
認証が正しく機能するのに問題があります。私がログインすると、すべての正しいデータ(session_name、sessid、tokenなど)が返されます。しかし、それ以降のコール(システム/接続)を行うと、別の「sessid」が返され、私は「匿名ユーザー」と伝えられます。
それはちょうど私がちょうどログインしていることを認識していないここで私が取ってい手順は次のとおりです。
- ログインを「ユーザー/ログイン」呼び出しを介して。
- APIは、すべての正しいユーザー情報を持つ "sessid"、 "session_name"、 "token"、 "user"オブジェクトを返します。
- 後続のAPI呼び出しのためにX-CSRF-TOKENを格納します。
- ヘッダーに "X-CSRF-TOKEN"を追加し、APIを呼び出して "system/connect"呼び出しでユーザー情報を取得します。
- APIは、「匿名ユーザー」のために、新しい/異なる「sessid」、同じ「session_name」、および「user」ブロックを返します。
私の人生にとって、なぜ匿名ユーザーが返されているのか分かりません。誰かが私にこれを理解させる手助けはできますか?ここで
は私のユーザー/ログイン機能である:ここで
////////////////////////////////////////////////////
// LOGIN API CALL
// make call to login with 'user/login' api call
////////////////////////////////////////////////////
login(data): Observable<User> {
// set variables
let url = this.postUrl + 'user/login';
let headers = new Headers({'Content-Type': 'application/json'});
let options = new RequestOptions({ headers: headers});
// make the call
return this.http.post(url, data, options)
.map((res:Response) => this.loginData(res))
.catch((error:any) => this.handleError(error));
}
private loginData(res: Response) {
let body = res.json();
Cookie.set('X-CSRF-TOKEN', body.token);
return body!=null?body:[];
}
は私のユーザー/機能を接続するだけです:
////////////////////////////////////////////////////
// GET USER DATA OR "CONNECT" API CALL
// get user data with 'system/connect' api call
////////////////////////////////////////////////////
getUser(): Observable<any> {
// Retrieve the token
let token = Cookie.get('X-CSRF-TOKEN');
// Prepare API call
let url = this.postUrl + 'system/connect';
let body = { username: 'test', password: 'test' };
let headers = new Headers('X-CSRF-TOKEN', token);
headers.append('Content-Type', 'application/json');
let options = new RequestOptions({ headers: headers, withCredentials: true });
return this.http.post(url, body, options)
.map((res:Response) => this.extractData(res))
.catch((error:any) => this.handleError(error));
}