このソリューションはJWTを使用した認証用ですが、JWTを使用しない他のソリューションもあります。
This package(django-rest-framework-jwt)では、Django Rest FrameworkでJWTを管理するための認証エンドポイントを持つことができます。 docsに従うと問題は発生しません。
Angular2の最後では、ログイン資格情報を使用してサーバーからJWTを要求するログインサービスが必要です。それはDjangoのユーザモデルに依存します。
This blog postはAngular2 JWT認証に非常に役立ちます。 authentication.serviceでログイン機能を確認することができます。 DRF-jwtに合わせてコードを少し変更しました。
let headers = new Headers({
'Accept': 'application/json',
'Content-Type': 'application/json',
});
let options = new RequestOptions({
headers: headers
});
this.http.post(basePath + '/api-token-auth/', JSON.stringify({ username: username, password: password }), options)
.map((response: Response) => {
// login successful if there's a jwt token in the response
let token = response.json() && response.json().token;
if (token) {
// set token property
this.token = token;
// store username and jwt token in local storage to keep user logged in between page refreshes
localStorage.setItem('id_token', token);
// return true to indicate successful login
return true;
} else {
// return false to indicate failed login
return false;
}
});
// 'api-token-auth/' is the default endpoint with drf-jwt
これは、drfからのjwtを要求し、それをlocalStorageに格納します。
そこから、認証を必要とするすべてのhttp要求にAuthorizationヘッダーが含まれている必要があります。これを可能にするhttp wrapperがあります。
override the default configuration settingsです。オーバーライドする必要がある最小構成は、globalHeadersを設定する必要があるということです。 tokenNameまたはtokenGetterを変更する必要はありません。 Content-Type: application/json
とAccept: application/json
を追加するだけです。 (DRFはAccept
ヘッダーをチェックして、どのような種類のものを使用するかを決定します)。drf-jwtがそのヘッダーを認証ヘッダーに使用するか、drf-jwtの設定から変更できるため、headerPrefixをJWT
に変更することもできます。