Ho problemi con la seguente azione "/ login" azione percorso nella mia classe UsersControllerYii2 Rest - metodo di azione personalizzato e OPZIONI
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;
}
La situazione è che sto usando il metodo POST per effettuare login e sto chiamando questa rotta da un dominio diverso, quindi la libreria di frontend prova prima a chiamare/login route con il metodo OPTIONS per verificare se è permesso o non chiamare/login con POST ..
Il problema è che la funzionalità integrata di yii2 resto ActiveController è solo per/users e/users/{id}
Se aggiungo manualmente questo/percorso di accesso per essere disponibile sia in POST che in OPZIONI tramite le azioni verbFilter, quindi yii sta provando a chiamare effettivamente l'azione di login con la richiesta OPTIONS. Voglio dire, sta cercando di eseguire il login. Certo che non può, perché non sta inviando campi email e password, ma posso vedere un errore nel file di registro.
Quindi, la mia domanda è ... Esiste un modo per configurare correttamente queste azioni di percorso "personalizzate" e rendere OPZIONI eseguite in modo trasparente? Perché mi aspetto che l'azione di accesso non venga eseguita quando la si chiama con OPTIONS, ma invece di restituire direttamente le intestazioni dei metodi consentiti OPTIONS.
Aggiorna informazioni: Gestione regole Aggiunto URL
'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'
],
],
@CreatorR Ho provato la tua soluzione ma non ha funzionato perché, penso, che non hai capito la mia domanda .. Loking al codice sorgente di resto ActiveController, vedo che un 'yii \ rest \ OptionsAction' l'azione è configurata per il metodo delle opzioni. C'è un modo per configurarlo che quando si chiama/login con POST chiama actionLogin e quando si chiama/login con OPTIONS allora chiama 'yii \ rest \ OptionsAction'? Qual è il modo migliore per farlo? Penso che questo sia quello che mi serve .. – edrian
@edrian, sarebbe bello vedere le tue urlRegole di manager – CreatoR
@CreatorR Ho aggiornato il post come richiesto – edrian