Am angular2 mit und yii2 geruhsamen Dienste aber es funktioniert nichtden Träger Token in yii2 Rest Passing gibt einen Fehler von 401
Das ist mein angular2 Teil
In the userservice
constructor(private http:HttpClientService, private _domaindetails:Domaindetails) { }
profile(val:string="profile"):Observable<User>{
return this.http.get(this.getUserUrl(val))
.map(this.extractData)
}
Dies ist der httpclientService
createAuthorizationHeader(headers: Headers) {
let token = JSON.parse(localStorage.getItem("currentUser")).token;
if (token) {
headers.append('Authorization', 'Bearer ' + token);
headers.append('Content-Type', 'application/x-www-form-urlencoded');
headers.append('Content-Type', 'application/json');
}
}
post(url, data) {
let headers = new Headers();
this.createAuthorizationHeader(headers);
return this.http.post(url, data, {
headers: headers
});
}
Dies ist mein Backend In Yii2
public function behaviors()
{
$behaviors = parent::behaviors();
$behaviors['corsFilter'] = [
'class' => \yii\filters\Cors::className(),
'cors' => [
// restrict access to
'Origin' => ['http://localhost:4200'],
'Access-Control-Request-Method' => ['POST', 'GET','PUT'],
// Allow only POST and PUT methods
'Access-Control-Request-Headers' => ['*'],
// Allow only headers 'X-Wsse'
// 'Access-Control-Allow-Credentials' => true,
// Allow OPTIONS caching
'Access-Control-Max-Age' => 3600,
// Allow the X-Pagination-Current-Page header to be exposed to the browser.
'Access-Control-Expose-Headers' => ['X-Pagination-Current-Page'],
],
];
$auth = $behaviors['authenticator'] = [
'class' => HttpBearerAuth::className(),
'only' => ['can-access','profile'], //access controller
];
$behaviors['authenticator']['except'] = ['options'];
return $behaviors;
}
Und die yii2 Aktion fehlschlägt einen Fehler von unerlaubten Zugriff Rückkehr
public function actionProfile()
{
$user = Yii::$app->user->identity;
return ['data' => $user];
}
Wenn ich überprüfen Yii::$app->request->headers;
Wie Sie der Inhaber Token
gesetzt sehenDieses usermodel meine ist
public static function findIdentityByAccessToken($token, $type = null)
{
return static::findOne(['auth_key' => $token]); //auth_key is the value used in bearer token
}
Warum es einem Fehler 401 nicht autorisierten Zugriff auf Rückkehr und noch nicht halten, wenn ich den gleichen Wert von authkey und stellen Berechtigungsinhaber Header in Postbote verwenden funktioniert es
Nach einiger Forschung fand ich heraus, dass das, wenn angular2 eine Anfrage macht sendet er eine Optionsanfrage, die
Haben Sie versucht, das Verhalten auf "bearerAuth" anstelle von "authenticator" zu setzen? – kyle
Das schlägt auch fehl und gibt unbekanntes bearerAuth zurück –