Yii2 Rest - Benutzerdefinierte Aktion und OPTIONEN Methode
Ich habe Probleme mit der folgenden Aktion "/login" route Aktion in meinem UsersController Klasse
public function actionLogin(){
$data = Yii::$app->getRequest()->getBodyParams();
$model = new Usuario();
//Validamos que se hayan recibido los campos
if(empty($data['email']) || empty($data['password'])){
throw new \yii\web\BadRequestHttpException("Debe ingresar email y password");
}
//Validamos usuario y contraseña
$usuario = $model->findByUsername($data['email']);
if(empty($usuario) || !$usuario->validatePassword($data['password'])){
throw new \yii\web\UnauthorizedHttpException("Usuario y/o contraseña incorrectos");
}
return $usuario;
}
Ist die situation, dass ich mit POST-Methode zum ausführen der login, und ich rufe diese route aus einer anderen Domäne, so dass der frontend-Bibliothek zunächst versuchen, Aufruf /login route mit OPTIONEN Methode zu überprüfen, ob es erlaubt ist oder nicht anrufen /login mit POST..
Das problem ist, dass die eingebaute Funktionalität von yii2 rest ActiveController ist nur für /users und /users/{id}
Wenn ich manuell hinzufügen, das /login route werden sowohl in der POST und OPTIONEN durch Aktionen verbFilter, dann yii versucht, um tatsächlich rufen Sie die login-action mit der OPTIONS-Anfrage. Ich meine, es ist Versuch, eine login. Natürlich kann es nicht, weil es nicht senden von E-Mails und Passwörter Felder, aber ich sehe einen Fehler in der log-Datei.
So, meine Frage ist... gibt es eine Möglichkeit zu konfigurieren, korrekt, diese "custom" - Routen, Aktionen und OPTIONEN führt transparent? Denn ich gehe davon aus, dass der login-Aktion, die nicht ausgeführt werden, beim Aufruf mit den OPTIONEN, aber statt nach Rückkehr direkt den OPTIONEN erlaubt, Methoden-Header.
Update-Info: Added URL-manager-Regeln
'urlManager' => [
'enablePrettyUrl' => true,
'enableStrictParsing' => true,
'showScriptName' => true,
'rules' => [
[
'class' => 'yii\rest\UrlRule',
'controller' => ['v1/users'],
'pluralize' => false,
'tokens' => [
'{id}' => '<id:\\w+>'
]
],
//Rutas usuario
'v1/login' => '/v1/users/login'
],
],
Du musst angemeldet sein, um einen Kommentar abzugeben.
Standardmäßig die
yii\rest\UrlRule
Klasse gilt, diese Muster zu jedem beliebigen Endpunkt :Was bedeutet, dass jede Anforderung holding OPTIONEN Verben werden weitergeleitet zu
yii\rest\OptionsAction
wenn IhrloginAction
ist schriftlich innerhalb einer Klasse, die sich ActiveController.Was ich Vorschlage, ist das überschreiben
patterns
durch verlassen der nur verwendet Verben wie Ihr login Aktion muss nicht jede von der anderen CRUD-Aktionen. diese Arbeit sollte in Ihrem Fall :HINWEIS: die Lösung von @CreatoR ist auch eine Anforderung hier und genau so, wie er es Tat, ohne definieren von Schlüsseln. sonst OPTIONEN Verben werden zurückgewiesen, wenn Sie nicht authentifiziert.
Im Falle dass, wenn Ihre login Aktion definiert ist, unter einer Klasse, die sich
yii\rest\Controller
direkt statt der übergabe durchyii\rest\ActiveController
(die sollte angemessen sein für die Authentifizierung Maßnahmen, da es keine CRUD, die hier nötig) dann das gleiche Regeln configs sollte gut funktionieren, aber Sie müssen manuell hinzufügen, die actionOptions code :Hatte ich das gleiche Problem.
Dies ist, wie ich es behoben:
Fügte ich ein
extraPatterns
parameter, um meine Regel, wie diese:Diese Weise die
options
Aktion aufgerufen wird, werden für jede benutzerdefinierte Aktion, die ich in jedem dieser Controller.Setting unknown property: yii\web\UrlRule::OPTIONS <action:\w+>
abrufen dieser Fehler , hast du eine Lösung dafür ?Ich das Problem durch die Ausweitung der Cors-filter-Klasse:
dann
Müssen Sie
Cors
filter im controllerbehaviours()
- Methode (siehe wie im offiziellen guide) mit folgenden Bedingungen:Cors
filter sollte definiert werden, bevor die Authentifizierung /Autorisierung Filteroption
imAccessControl
filterIn Ihrer situation,
UsersController
derartigebehaviors()
Methode:custom
route in ActiveController hier beschrieben yiiframework.com/doc-2.0/guide-rest-routing.html (verwenden SieextraPatterns
- Konfiguration).