Ich habe eine Yii2 REST API-Anwendung entwickelt. Im Lokal funktioniert alles gut. Ich habe die Anwendung auf Remote-Server bereitgestellt. Ich konnte über Postman eine Antwort bekommen. Aber wenn ich versuche, eine Anfrage mit AJAX oder Angular zu stellen, bekomme ich "Antwort für preflight hat ungültigen HTTP-Statuscode 401" Fehler. mein Controller-Verhalten() Methode:YII 2 REST CORS Problem auf Remote-Server
public function behaviors() {
return array_merge(parent::behaviors(), [
$behaviors['corsFilter'] = [
'class' => \yii\filters\Cors::className(),
'cors' => [
// restrict access to domains:
'Origin' => ['*'],
'Access-Control-Request-Method' => ['GET','POST','PUT','DELETE','OPTIONS'],
'Access-Control-Request-Headers' => ['*'],
'Access-Control-Allow-Credentials' => true,
'Access-Control-Max-Age' => 3600, // Cache (seconds)
],
],
$behaviors['authenticator'] = [
'class' => AvnrHttpBasicAuth::className(),
],
]);
}
Antwort und Request-Header:
Ich nehme an, dies ist Thema CORS, aber ich kann nicht herausfinden, Warum funktioniert das nicht auf dem Remote-Server, auf dem Centos läuft? Apache.
Ich habe verlängert HTTPBasicAuth und meine eigene AvnrHttpBasicAuth-Klasse
class AvnrHttpBasicAuth extends HttpBasicAuth
{
public function authenticate($user, $request, $response)
{
$authHeader = $request->getHeaders()->get('Authorization');
if ($authHeader !== null && preg_match("/^Basic\\s+(.*?)$/", $authHeader, $matches)) {
$identity = $user->loginByAccessToken($matches[1], get_class($this));
if ($identity === null) {
$this->handleFailure($response);
}
return $identity;
}
return null;
}
}
Ich habe 'except' => ['options'] Ausnahme, aber immer noch das gleiche. – Chamindar2002
Wie auch immer http: //XXX.XXX.73.161/~dsltrading/v1/web/api/customer/view? Id = 1 gibt zurück: 405 "Methode nicht zulässig. Diese URL kann nur die folgenden Anfrage-Methoden behandeln: GET, HEAD – Chamindar2002
Ich nahm an, dass 'AvnrHttpBasicAuth' eine' except' Eigenschaft als alle offiziellen Yii2-Filter hat, aber es kann es nicht haben. Ich weiß nicht, welche Bibliothek das ist. –