2016-08-29 1 views
1

Wenn jeder Benutzer anmelden versuchen, die folgenden POST-Fehlerergebnisse:401 Fehler bei der Post-Anforderung Stormpath Express + Reagieren + Node + Gulp

XMLHttpRequest cannot load https://api.stormpath.com/v1/applications/[APP_HREF]/login. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8080' is therefore not allowed access. The response had HTTP status code 401. 

In meiner server.js Datei, habe ich folgendes sagen:

var express = require('express'); 
var stormpath = require('express-stormpath'); 
var cors = require('cors'); 

var app = express(); 

app.use(stormpath.init(app, { 

    apiKey: { 
    id: 'xyz', 
    secret: 'abc' // Using the unsafe inline option for example purposes 
    }, 
    application: { 
    href: `[APP_HREF]` 
    }, 
    web: { 
    produces: ['application/json'] 
    }, 
    debug: 'info' 
})); 

app.use(cors({ 
    origin: 'http://localhost:8080', 
    credentials: true 
})); 

app.post('/', stormpath.loginRequired, function (req, res) { 
    function writeError(message) { 
    res.status(400); 
    res.json({ message: message, status: 400 }); 
    res.end(); 
    } 



}); 

app.on('stormpath.ready', function() { 
    var server = app.listen(process.env.PORT, function() { 
    try { 
     process.send('CONNECTED'); 
    } catch(e) {} 
    }); 
}); 

In meiner login.jsx Datei habe ich eingeschlossen:

login: function(e) { 
     e.preventDefault(); 
     e.stopPropagation(); 


     this.serverRequest = $.post('https://api.stormpath.com/v1/applications/[APP_HREF]/login', 
     { 
     "username": document.getElementById("email").value, 
     "password": document.getElementById("pass").value 
     }, function (result) { 
     console.log(result); 

     }); 

ich habe auch meine stormpath.yml-Datei gespeichert.

Ich verwende nicht React-Stormpath, weil ich bereits meine Ansichten für Login und Registrierung erstellt habe. Es sieht so aus, als müsste ich nur mit Stormpath auf die REST-API zugreifen, aber ich bin mir nicht sicher, was ich hinzufügen muss, um den API-Schlüssel zu validieren.

Auf der tatsächlichen login.jsx-Datei, müsste ich das ID: SECRET-Paar sowie einen Teil der POST-Anfrage senden?

Antwort

2

Ich sehe, dass Sie in Ihrem login.jsx versuchen, direkt an die Stormpath REST API zu posten, aber das ist leider noch nicht möglich. Stattdessen werden Sie den Post an Ihren Express-Server senden und dieser wiederum wird mit Stormpath kommunizieren.

Sie bereits express-stormpath in Ihrem Express-Server haben, so brauchen Sie nur auf /login Ihre Login-Formular zu schreiben und Stormpath wird der Rest kümmern :)

Lassen Sie uns wissen, wenn Sie in Probleme laufen! FYI, wir werden bald eine "serverlose" Funktion hinzufügen, die Sie hier folgen können: http://ideas.stormpath.com/ideas/IAM-I-59

+0

Vielen Dank! Wenn ich mein Login-Formular an/login sende, sage ich, dass ich die Funktion innerhalb von login.jsx in 'this.serverRequest = $ .post ('/ login', { " Benutzername ": document.getElementById (" E-Mailadresse ") Wert, "Passwort": document.getElementById (" Passwort ") Wert } function (result) { console.log (Ergebnis); });' .? Ich verstehe es konzeptionell, bin mir aber nicht sicher, welches Posting auf meinem Express-Server in der Praxis aussehen würde. Vielen Dank! – kkers

+0

Ja! Das ist es. Dann akzeptiert das 'Express-stormpath'-Modul den POST zum'/login'-Endpunkt und verwendet Stormpath, um den Benutzer zu authentifizieren und ein Sitzungscookie für den Browser zu erstellen. – robertjd