2012-12-12 14 views
5

Ho un server di sviluppo (contenitore di servlet Java) in esecuzione sul mio computer all'interno della mia rete privata (intervallo IP 192.168.0.0 a 192.168.255.255). Questo server di sviluppo esegue il mio ambiente di test di integrazione. Questo ambiente di test ha il suo ID app Facebook. L'esecuzione del server nell'intervallo 192.168.x.y consente ai miei colleghi di testare il sito Web, accedere al mio sito Web locale con i loro account Facebook ecc.App di Facebook: consentire l'esecuzione di una singola app di Facebook su un indirizzo di rete privato arbitrario

Al https://developers.facebook.com -> nelle impostazioni delle app di Facebook -> che si trovano sotto "Impostazioni di base" - > nel campo "Sito web con accesso a Facebook", ho impostato http://192.168.2.106:8080, poiché questa è la combinazione indirizzo-porta a cui il mio server di sviluppo si lega.

A causa del DHCP, il mio computer ora ha un indirizzo IP leggermente diverso, ovvero 192.168.2.109. Ogni volta che inizio il mio server e quindi provare a fare qualcosa Facebook-API correlati (ad esempio Facebook Login), ricevo il seguente messaggio di errore da Facebook

{ 
    "error": { 
     "message": "Invalid redirect_uri: Given URL is not allowed by the Application configuration.", 
     "type": "OAuthException", 
     "code": 191 
    } 
} 

C'è un modo per avere una Facebook App consentono un "range di siti Web con indirizzi IP con accesso Facebook "? Quali altre soluzioni puoi suggerire?

I miei colleghi devono essere in grado di avviare il server di sviluppo sulle proprie macchine, con i propri indirizzi di rete privata. Pertanto, la stessa ID app Facebook funzionerà su macchine diverse con indirizzi IP diversi e sarà comunque accessibile a tutti all'interno della rete privata.

Si noti che l'impostazione "Sito Web con accesso Facebook" su localhost rende il server di sviluppo disponibile solo per la stessa macchina su cui è in esecuzione. Questo purtroppo impedisce ai colleghi di accedere a questa istanza del server di sviluppo.

Aggiornamento

bug Archiviato: https://developers.facebook.com/bugs/606277079382609

+0

Perché non impostare un lease statico sul server DCHP? – Igy

+0

Aggiungi i tuoi vincoli aggiuntivi alla domanda. – user314104

risposta

1

Se è in esecuzione su Windows si potrebbe provare a cambiare il file hosts in C: \ Windows \ System32 \ drivers \ etc e aggiungere il tuo IP a un immaginario dominio (anche i tuoi colleghi dovrebbero farlo) e metti quel dominio nel pannello Impostazioni di Facebook. Non sono sicuro di questo, quindi dimmi se funziona :)

+0

grazie per la soluzione. Ci ho pensato. Cambiare il file hosts su ogni computer collega nella mia rete privata non è pratico/possibile (ad esempio ci sono client Android). Inoltre, per quanto ne sappia, la sintassi del file hosts di Windows non supporta i caratteri jolly dell'indirizzo IP. Quindi, quando l'IP del server cambia (ad esempio a causa di DHCP o server in esecuzione su una macchina diversa), avrei bisogno di aggiornare il file hosts su ogni macchina. – Abdull

1

Per quanto ne so non è possibile impostare un intervallo IP nelle impostazioni dell'applicazione, il redirect_uri è in genere destinato a gestire URL con nomi di dominio, che è di solito è il caso con siti Web pubblici.

Il modo migliore per evitare questo problema è assicurarsi che il server di sviluppo locale abbia sempre lo stesso IP, che in genere è una buona pratica se si sta scrivendo un server. ci sono diversi modi per farlo a seconda della configurazione della rete, qui ci sono due possibilità:

  1. Imposta il server DHCP per assegnare sempre lo stesso indirizzo IP al server dev indirizzo MAC
  2. piegare le regole un po ' e configura il tuo computer per richiedere un indirizzo IP non utilizzato. I server DHCP in genere assegnano gli IP in ordine (partiranno da 192.168.1.1 e funzionano fino a 192.168.254.254), quindi chiedi al tuo computer di richiedere un IP nella parte più alta dell'intervallo (esegui prima il ping per assicurarti che non venga utilizzato)
+1

Ecco le sfide/i vincoli che sto affrontando: QUALUNQUE sviluppatore deve essere in grado di avviare l'applicazione Web sul proprio computer portatile in qualsiasi ambiente di rete: sul posto di lavoro, a casa, sulla rete estera di un business partner. Soprattutto il caso d'uso della rete estera rende impossibile fare affidamento su un IP in continua evoluzione. E il caso d'uso "ogni sviluppatore-può-iniziare-l'-applicazione-web" rende impossibile avere un solo server IP/un server di sviluppo centrale. – Abdull

1

Invece di utilizzare un indirizzo IP, utilizzare localhost.

Così hxxp: //192.168.1.20 sarebbe diventato hxxp: // localhost

(sostituire xx con tt)

Questo risolve di nuovo alla macchina locale, qualunque sia il suo indirizzo IP è. Presumo che il tuo server di sviluppo sia in esecuzione sul tuo PC, usando WAMP o qualcosa di simile. Traggo questa ipotesi perché dichiari che deve essere eseguito su qualsiasi laptop in qualsiasi ambiente di rete.

+0

L'esecuzione del server di sviluppo su localhost rende impossibile (?) Ai colleghi l'accesso a questo server. I colleghi devono essere in grado di accedere al server per accedere con il loro account Facebook e testare/giocare con il sito web. – Abdull

+0

Quindi c'è un solo server di sviluppo, ma vuoi che le persone possano accedervi da qualsiasi luogo? Se questo è il caso, non sarà possibile utilizzare l'indirizzamento locale, perché se un collega si trova su una rete diversa, avrà la sua rete locale. L'intero punto sull'indirizzamento locale (192.168, 10.0 ecc.) È che tutte le reti possono avere il proprio OWN. Quindi stai dicendo che vuoi che gli sviluppatori di qualsiasi rete siano in grado di accedere al tuo server di sviluppo? In tal caso, sarà necessario utilizzare l'indirizzo IP esterno della rete e assegnare una porta specifica, quindi inoltrarla al server di sviluppo. – Puzbie

1

Se possiedi un dominio, puoi creare un sottodominio test.mydomain.com che punta a 192.168.2.109.

Quando l'indirizzo dovrebbe cambiare di nuovo, è possibile modificare la voce di conseguenza.

Non c'è alcun motivo per cui una voce DNS non possa puntare a un indirizzo IP dall'intervallo 192.168. Per qualcuno al di fuori della tua rete non sarà molto utile, perché non può accedere al tuo indirizzo IP dall'esterno, ma per i tuoi collaboratori all'interno della rete funzionerà.

Se un collega desidera eseguire l'app Web sul proprio PC, può ovviamente eseguire l'override di questa impostazione utilizzando il proprio file hosts.

3

Se si riesce a evitare l'utilizzo di localhost, esiste un modo molto semplice: Rendere l'app di Facebook reindirizzare su http://lvh.me:3000/ (o su qualsiasi porta che il server sta ascoltando su localhost). Uno sviluppatore benevolo possiede il dominio lvh.me e ha avuto l'impostazione DNS per puntare a localhost. Ho provato questo ed è quello che ho usato per i test di sviluppo. Analogamente, puoi fare cose del genere e indica un record DNS di un dominio che possiedi su un intervallo di ip locale. Non ho familiarità con DNS quindi non sono sicuro di come configurarlo o se è possibile.

Problemi correlati