2015-04-22 17 views
5

Così ho guardato questo post: is an entity body allowed for an http delete request

che sembra indicare che, se è 'ok' per fare un certo livello concettuale, in pratica non può essere fattibile perché i browser lo ignorano.

Ho alcuni middleware di autenticazione express.js che devo passare, e non voglio collegare i miei dettagli utente ai parametri url. Tutte le altre mie richieste che devono essere autenticate allegano questi dettagli al corpo della richiesta.

C'è un modo per forzare questo? Ho visto alcuni altri post in cui alcune persone sembravano avere successo nel passare un corpo con la loro richiesta di cancellazione.

Sto eseguendo un back-end nodo/vele. Registra sempre il corpo come non definito per una richiesta di eliminazione. C'è un modo per modificare

risposta

3

L'API vele tira l'id dell'oggetto per eliminare dai parametri, quindi dobbiamo aggiungere l'id all'url.

Ma se voglio passare alcuni dettagli di autenticazione in un corpo per la verifica lato server prima di elaborare la richiesta di cancellazione, non posso semplicemente incollarli in un oggetto come secondo parametro della richiesta di cancellazione, come è possibile con $ http.post.

Il metodo di post di Angular assegna automaticamente tutto ciò che inseriamo come secondo parametro al corpo della richiesta, ma il metodo di eliminazione non corrisponde a.

Il metodo $ http.delete di Angular ci consente di fornire un oggetto config come secondo parametro, tramite il quale possiamo accedere alla proprietà "data". Questo è lo stesso modo in cui lo fa attraverso il secondo parametro.

Quindi, se abbiamo bisogno di attaccare un corpo ad una richiesta di eliminazione si può utilizzare il seguente:

$http.delete('/api/' + objectToDelete.id, {data: {id: currentUser().id, level: currentUser().level}}); 

Questa passerà l'oggetto di eliminare id nel parametro url, e le mie credenziali utente nel corpo come un oggetto.

+0

Strano, ho provato questo metodo su Angular 1.4.x e la richiesta viene inviata senza corpo. Funziona per altre persone? – chrisvdb

+0

Non funziona nemmeno per Angular 1.4.2 –

+0

Non funziona su Angular 1.5 –

2

Onestamente, ogni volta che un problema suona come una "restrizione di come REST", un ripensamento della strategia e la filosofia potrebbe essere una buona idea.

ho alcuni middleware di autenticazione che ho bisogno di ottenere attraverso

Non voglio attaccare i miei dati di login per url params

non sto rispondendo direttamente alla domanda, ma si dovrebbe sapere che tra i beni comuni

  • parametri URL (o query, ma in ogni caso URL)
  • corpo

c'è una terza opzione per il "passaggio di valori al server":

  • richiesta intestazioni

che avevo appena suggerire di prendere in considerazione che la terza opzione per fornire le credenziali : richiesta intestazione.

Edit: seguente allegato sarebbe solo si applica a qualsiasi middleware "esterno", come un server proxy o qualsiasi altra cosa, non un vero espresso middleware all'interno sails.js

Inoltre, che sarebbe una buona idea che il tuo middleware abbia rimosso quelle intestazioni prima di reindirizzare alla vera azione.

+0

Grazie per l'input. Ho preso in considerazione ciò che hai detto e ho aggiunto un'ulteriore intestazione nel mio intercettore auth. Puoi approfondire il mio sarebbe utile togliere le intestazioni nel middleware? – tpie

+0

Hai fatto il mio 50 rep per poterti rispondere qui! = p Non so cosa intendi con "middleware", quindi ho suggerito che, se questo è es. un altro server o forse un'altra parte del codice (gestendo esclusivamente l'autenticazione, senza alcun collegamento con le azioni reali), non dovrebbe reindirizzare quelle intestazioni per scopi di sicurezza. Modifica: Se si sta attaccando esclusivamente all'interno delle vele, questo è solo opzionale per rimuovere le credenziali prima di entrare nel controller, ma se l'autenticazione è al di fuori, considerarlo. –

+0

"Il middleware è una funzione con accesso all'oggetto richiesta (req), all'oggetto risposta (res) e al middleware successivo in linea nel ciclo richiesta-risposta di un'applicazione Express, comunemente indicato da una variabile denominata di seguito." In pratica consente di iniettare le funzioni per passare il req through prima di arrivare effettivamente a qualsiasi cosa tu voglia fare con la richiesta. – tpie

Problemi correlati