2016-10-03 7 views
2

Ich möchte ein Modul erweitern (oder ein eigenes erstellen), um Benutzer automatisch zu Apostroph hinzuzufügen (Sammlung aposUsersSafe).Benutzer automatisch zu Apostroph hinzufügen

Ich sehe keine eingebaute Methode im Apostroph-Benutzer-Modul dafür, und suche nach einer Anleitung, wie es umgesetzt werden könnte? Vielen Dank!

Antwort

2

Wie bereits erwähnt, bin ich der Hauptarchitekt von Apostrophe in der P'unk Avenue.

Die aposUsersSafe Sammlung dient zum Speichern von Passwort-Hashes und denormalisierten Kopien nur einiger eng verwandter Eigenschaften. Sie würden normalerweise nie direkt mit ihm interagieren müssen. Wie alle anderen Dokumente in Apostrophe leben Benutzer in der aposDocs Sammlung. Und es ist am besten, mit ihnen über die Methoden zu interagieren, die von dem Modul bereitgestellt werden, das diese Art von Stück verwaltet. In diesem Fall wäre das apos.users (das apostrophe-users Modul).

Überprüfen Sie diese Methode; Dies wird leicht von der addFromTask Methode apostrophe-users refaktoriert, die das Hinzufügen eines Benutzers implementiert und sie auch zu einer Gruppe hinzufügt, etwas, das Sie fast sicher auch tun möchten.

Es gibt keinen Code hier, um das Passwort zu hashen, weil die insert Methode von das für uns tut.

self.addUser = function(req, username, password, groupname, callback) { 
    // find the group 
    return self.apos.groups.find(req, { title: groupname }).permission(false).toObject(function(err, group) { 
    if (err) { 
     return callback(err); 
    } 
    if (!group) { 
     return callback('That group does not exist.'); 
    } 
    return self.apos.users.insert(req, { 
     username: username, 
     password: password, 
     title: username, 
     firstName: username, 
     groupIds: [ group._id ] 
    }, { permissions: false }, callback); 
    }); 
}; 

permission(false) auf dem Cursor aufgerufen und eine Options Objekt mit { permissions: false } geben wird einzufügen, weil ich Sie davon aus, das an dieser Stelle passieren soll, unabhängig davon, wer es auslöst.

Ich empfehle reading this tutorial on Apostrophe's model layer, um eine solide Grundlage in der Arbeit mit Apostrophe Inhaltstypen zu bekommen, ohne in Schwierigkeiten zu geraten. Sie können MongoDB direkt verwenden, aber Sie müssen wissen, wann Sie das tun sollen und wann nicht.

Sie können beim Einfügen des Benutzers weitere Eigenschaften übergeben. Dies ist nur das absolute Minimum für vernünftiges Verhalten.

Was die Methode aufrufen, wenn Sie es lib/modules/apostrophe-users/index.js auf Projektebene innerhalb construct hinzuzufügen wäre, dann könnte man es so aus Middleware nennen:

return self.apos.users.addUser(req, username, password, groupname, function(err, newUser) { 
    if (err) { 
    // Handle the error as you see fit, one way is a 403 forbidden response 
    res.statusCode = 403; 
    return res.send('forbidden'); 
    } 
    // newUser is the new user. You could log them in and redirect, 
    // with code I gave you elsewhere, or continue request: 
    return next(); 
}); 

Hoffe, das ist hilfreich!

+0

Danke. Dies ist definitiv hilfreich. Wenn ich Ihren Vorschlag verstehe, würde ich self.AddUser hinzufügen, um in meinem Modul lib \ modules \ apostrophe-users zu konstruieren. Ich möchte dann diese Methode aus der Überprüfung, die ich in meinem Apostroph-Express-Modul ausführen: 'Middleware: [ Funktion (Req, Res, nächste) { Const E-Mail = // von Cookie Const Auth = // from cookie if (email && auth) { // Wie rufe ich addUser hier auf? //apostrophe-users.addUser(req, email, '', 'admin', null) } } ' Nicht sicher, wie man aufruft? –

+0

Mit der anderen Antwort, die Sie in den Auto-Login-Benutzern (demo-autologin-Modul) angegeben haben, verwenden Sie die Methode self.pageBeforeSend. Ich dachte, dass dies nur auf übereinstimmenden Routen ausgeführt werden würde, aber es sieht so aus, als würde dies bei jeder Anfrage ausgeführt, da das Modul in app.js definiert ist. Aus meiner Sicht kann diese self.pageBeforeSend-Methode verwendet werden, um beliebigen Code auszuführen, den ich auf jeder Seitenanforderung haben möchte - mit Zugriff auf die Anfrage- und Apos-Objekte.Wenn dies nicht der richtige Weg ist, Code bei jeder Anfrage auszuführen, können Sie mich auf einen besseren Ansatz hinweisen? –

+0

Wenn Sie diese Methode zu Apostrophe-Benutzer/index.js hinzufügen, wie Sie vorschlagen, dann würden Sie es wie folgt von einer Middleware-Funktion in einem anderen Modul aufrufen: return self.apos.users.addUser (req, Benutzername, Passwort, Gruppenname name~~POS=HEADCOMP, Funktion (err, newUser) { if (err) {// die Fehler behandeln, wie Sie für richtig halten, ist eine Möglichkeit, ein 403 verbotene Antwort res.statusCode = 403; return res.send ('verboten') ; } // newUser ist der neue Benutzer Sie könnten sie anmelden und umleiten, // mit Code, den ich Ihnen woanders gegeben habe, oder weiter Anfrage: return next(); }); –

Verwandte Themen