Winkel - /Knoten - /Express - /Passport-Cross-Domain-Probleme - Ermöglichen CORS Passport-Facebook-Authentifizierung
Es ist schon zwei Tage und eine million versucht zu aktivieren CORS, wenn Sie versuchen, einen Benutzer zu authentifizieren, die mit Facebook mit Pass in NodeJS/Express.
Den Fehler bekomme ich auf dem Chrom, ist dies:
XMLHttpRequest cannot load https://www.facebook.com/dialog/oauth?response_type=code&redirect_uri=http%…%3A8080%2Fauth%2Ffacebook%2Fcallback&scope=email&client_id=598171076960591.
No 'Access-Control-Allow-Origin' header is present on the requested resource.
Origin 'http://localhost:8080' is therefore not allowed access.
Den Routen, die ich benutze sind so einfach:
//=====================================
//FACEBOOK ROUTES =====================
//=====================================
//route for facebook authentication and login
app.get('/auth/facebook', passport.authenticate('facebook', { scope : 'email' }));
//handle the callback after facebook has authenticated the user
app.get('/auth/facebook/callback',
passport.authenticate('facebook', {
successRedirect : '/home',
failureRedirect : '/login'
}));
Dies ist, wie die Strecke heißt, die auf meinem angularJS-Datei (ich habe auch versucht die Einstellung withCredentials : true):
$http.get('/auth/facebook')
.success(function(response) {
}).error(function(response){
});
Habe ich versucht, ein Dutzend Lösungen, die ich hier gefunden auf StackOverflow und in anderen Foren.
-
Ich habe versucht, das hinzufügen dieser auf die vor meiner Routen auf der routes.js Dateien:
app.all('*', function(req, res, next) { res.header('Access-Control-Allow-Origin', '*'); res.header("Access-Control-Allow-Headers", "Content-Type,X-CSRF-Token, X-Requested-With, Accept, Accept-Version, Content-Length, Content-MD5, Date, X-Api-Version, X-File-Name"); res.header('Access-Control-Allow-Methods', 'GET,POST,PUT,HEAD,DELETE,OPTIONS'); res.header('Access-Control-Allow-Credentials', true); if ('OPTIONS' == req.method) { res.send(200); } else { next(); } });
-
Ich habe versucht, das hinzufügen dieser auf server.js Datei (Anmerkung, die ich geändert-header setHeader aber ich habe beides ausprobiert):
app.use(function(req, res, next) { res.setHeader('Access-Control-Allow-Origin', '*'); res.setHeader('Access-Control-Allow-Headers', 'Content-Type,X-Requested-With'); res.setHeader('Access-Control-Allow-Methods', 'GET,POST,PUT,HEAD,DELETE,OPTIONS'); res.setHeader('Access-Control-Allow-Credentials', true); if ('OPTIONS' == req.method) { res.send(200); } else { next(); } }); require('./app/routes.js')(app, passport);
-
Ich habe versucht, das hinzufügen dieser auf meine app.js Datei (angularJS-Konfigurationen):
$httpProvider.defaults.useXDomain = true; delete $httpProvider.defaults.headers.common['X-Requested-With']; $httpProvider.defaults.withCredentials = true;
Sowieso, ich weiß nicht, was anderes zu tun. Alles, was ich online gefunden habe nicht funktionieren.
Gibt es eine chance, es hat etwas mit mir zu tun mit AngularJS Routing? Ich sehe keinen Grund, warum dies wichtig sein würde, aber ich irgendwie lief aus Vermutungen.
Meine situation ist sehr ähnlich wie diese:
Winkel - /Knoten - /Express - /Pass - Probleme bei der Verbindung zu facebook(CORS)
Vielen Dank im Voraus!
- mögliche Duplikate von Wie können CORS in Express/NodeJS?
- Ich weiß, es gibt eine Menge ähnlicher Fragen, und ich habe gesehen, fast alle von Ihnen. Leider keine der Lösungen, die ich ausprobiert habe, funktionierte so weit...
- Sie nicht verwenden können beide
Access-Control-Allow-Credentials: true
undAccess-Control-Allow-Origin: *
' in der gleichen Zeit. Für Ihren Fall ist, sollten SieAccess-Control-Allow-Origin: localhost:8080
statt*
. - hi @LarissaLeite, hast du dir schon mal diese Arbeit mit anguar? Ich versuche jetzt schon und bin mit in Ihre Probleme.
- hast du die Lösung finden ? Es ist zwei Jahre, die Sie geschrieben, aber ich bin vor diesem Problem nun. Dank
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich wurde mit diesem Problem und fast den Punkt erreicht, wo ich überzeugt war, konnte ich keine Lösung finden, aber ein Blick auf ein einfaches tutorial wieder (http://mherman.org/blog/2013/11/10/social-authentication-with-passport-dot-js/) gelöst für mich. Ich habe versucht, ein API-Aufruf vom Winkel Node.js,, die gehen, um immer bringen Sie diese XMLHttpRequest Fehler trotz allem, was Sie konfigurieren auf dem server, CORS oder nicht! CORS ist nicht die Vorrichtung - wenn Sie geöffnet haben, Ihr Chrome-Netzwerk-Konsole, werden Sie feststellen, dass Ihre Anfrage an Google oder Facebook oder was auch immer 3rd-party-Website wird aus Ihrer Kontrolle zu ändern - es wurde ausgelöst von einer 302-Umleitung, die gesendet wurde, zurück zu Ihrem frontend, etwas, das Angular.js oder andere Frameworks, hat keine Kraft zu kontrollieren, daher kann man nicht wirklich "Access-Control-Allow-Origin" an, dass die Anfrage trotzdem.
Die Lösung ist einfach, um die Schaltfläche oder den text, der sagt "Melden Sie sich In _____" a LINK. Eine wörtliche
<a href="/auth/facebook"></a>
link. Das ist es.Natürlich, ich traf auch eine Menge anderer Stolpersteine und Fallstricke im Prozess. Ich versuchte nicht, verwenden Sie die Standard-middleware für den Pass.authentifizieren('facebook'), sondern versucht, wickeln Sie es in ein
function(req, res, next){ ... }
, denken Sie, dass würde etwas tun, aber es funktioniert nicht.$urlRouterProvider.otherwise('/');
und nahm mich zu meinem Haus zu Seite. Irgendwelche Gedanken?withCredentials
parameter im ajax-AufrufeHatte ich auch ein problem mit facebook login-und cors-aber nicht mit Pass in NodeJS/Express
meine Anwendung ist mit java(spring mvc)+ Winkel. Ich habe es geschafft, pass, über das problem zu ändern, meine erste fb-login-Funktion:
mit
Hoffe, es hilft!
Erstellen Sie ein html-tag zu tun, die GET-Anforderung statt, facebook nicht erlauben XMLHttpsRequests.
Etwa so:
<a href="http://localhost:8080/auth/facebook">sign in with facebook</a>